νΉμ μκ°μ μμ μ μμ½νλκ², μ¦ Linux λ° Unix μμ€ν μμ μμ μ μλννλλ° μ¬μ©λλ μ νΈλ¦¬ν°μ λλ€. crontabμ cron λ°λͺ¬μ μν΄ λ‘λλκ³ μμ μ μ€νν©λλ€.
π‘ νλμ νμ
- λΆ
- μκ°
- λ μ§
- μ
- μμΌ
κ° νλλ 0μμ 59μ¬μ΄μ μ«μ λλ λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ λͺ¨λ κ°μ μλ―Έν©λλ€.
μλ₯Ό λ€μ΄ * * * * *λ λ§€λΆλ§λ€ μμ μ μ€νν©λλ€.
μλ₯Ό λ€μ΄ λ§€μΌ μ€μ 10μλ§λ€ ls μμ μ μννκ³ μΆλ€λ©΄
crontab -e λ₯Ό ν΅ν΄ λ€μ΄κ°λ€
0 10 * * * ls
λ₯Ό μμ±νλ€ :wqλ₯Ό νλ©΄ μμ±μ λλ€
κ·Έλ λ€λ©΄ λ¨Όμ μΌμ μκ°μ μ€ννκΈ°μν ν¬λ‘€λ§ νμ΄μ¬μ½λλ₯Ό μμ±νκ² μ΅λλ€.
νμ΄μ¬ μ½λλ krxμμ μ’ λͺ©μ μ½λλ₯Ό κ°μ Έμ¨λ€
λ€μ΄λ² μ¦κΆ apiλ₯Ό ν΅ν΄μ κ°μ κ°μ Έμ€λ λ°©μμ νμμ΅λλ€.
from datetime import date, datetime
import requests
import pandas as pd
krx_url = "http://data.krx.co.kr/comm/bldAttendant/getJsonData.cmd"
krx_payload = {"bld": "dbms/MDC/STAT/standard/MDCSTAT01901",
"locale": "ko_KR",
"mktId": "ALL",
"share": "1",
"csvxls_isNo": "false",}
today = str(date.today()).replace("-","")
r= requests.post(krx_url, data=krx_payload)
total = []
for x in r.json()['OutBlock_1'][:10]:
symbol = x['ISU_SRT_CD']
url = f"https://api.finance.naver.com/siseJson.naver?symbol={symbol}&requestType=1&startTime={today}&endTime={today}&timeframe=day"
df =pd.DataFrame(data=eval(requests.post(url).text.strip())[1:], columns=eval(requests.post(url).text.strip())[0])
df['symbol'] = symbol
total.append(df)
pd.concat(total, ignore_index=True).to_csv(f"./{today}.csv", index=False)
π‘batch.shνμΌμ νμ
{python3μ κ²½λ‘} {stock.pyμ κ²½λ‘}
π‘python3μ κ²½λ‘
which python3λ₯Ό ν΅ν΄μ λμ¨ κ²½λ‘λ₯Ό 볡μ¬ν΄ λ‘λλ€.
μ΄μ crontab -e λ₯Ό ν΅ν΄μ μ€νμν¬ batch.shκ° νμν©λλ€.
vim batch.sh λ₯Ό ν΅ν΄μ μμ νμμ²λΌ νμΌμ μμ±ν©λλ€.
κ·Έλ¦¬κ³ λμλ batch.shμ κΆνμ μ£Όμ΄μΌ ν©λλ€.
π‘batch.sh κΆν μ£ΌκΈ°
chmod 777 batch.sh
crontab -e λ₯Ό ν΅ν΄μ λ€μ΄κ° μ€λλ€.
κ·Έλ¦¬κ³ μ΄μ μμμΌλ§λ€ 16μ 55λΆμ μ£Όμμ csvνμΌλ‘ μ μ₯ν κ²μ΄κΈ° λλ¬Έμ 쑰건μ λ§μΆ°μ μμ±ν΄μ€λλ€.
μ΄λ κ² κΉμ§νλ©΄ λμ λλ€.
π‘crontab 리μ€νΈ νμΈνκΈ°
crontab -l