crontab (크론탭)은 UNIX 기반 운영체제에서 작업을 스케쥴링하기 위한 프로그램이라고 한다
특정 시간, 특정 날짜에 반복적으로 작업해야 하는 명령을 예약해둘 수 있다
1. crontab에 명령 예약하기
crontab -e
# NVIDIA SDK Manager updater
# NVIDIA SDK Manager updater
# 0 12 */7 * * /bin/bash /home/uni/.nvsdkm/.updater/updater.sh
# 0 10 * * 1-5 python3 /home/uni/Workspace/project/auto-bot/pjt-crawler/crawler.py
crontab -e 명령어를 호출하면 예약된 작업들을 확인할 수 있다
0 10 * * 1-5 python3 /home/uni/Workspace/project/auto-bot/pjt-crawler/crawler.py
암호같이 생겼지만 왼쪽부터 차례로
minute(0-59) hour(0-23) day_of_month(1-31) month(1-12) weekday(0-6; 요일) command를 의미한다
따라서 0 10 * * 1-5 python3 /home/uni/Workspace/project/auto-bot/pjt-crawler/crawler.py는
- (command) python3 /home/uni/Workspace/project/auto-bot/pjt-crawler/crawler.py를
- (weekday: 1-5) 월요일부터 금요일까지
- (month: *) 매월
- (day_of_month: *) 매일
- (hour: 10) 10시
- (minute: 0) 0분에 실행하는 작업을 의미한다
(= 평일 오전 10시 정각에 crawler.py 파이썬 스크립트를 호출하는 예약 작업)
crontab을 등록만 하면 이제 예약 작업은 끝이 난다
2. crontab 명령 확인하기 (동작 안할 때)
혹시 1번처럼 작업했는데 예약한 동작이 수행되지 않는다면, 아래 명령어를 호출해서 crontab의 로그를 확인해보자
대부분 상대경로를 사용했거나, 환경변수가 지정되지 않았거나, 실행 권한을 주지 않아 오류가 발생한다고 한다
grep CRON /var/log/syslog
3. DISPLAY 지정하기 또는 pyvirtualdisplay 사용하기 (동작 안할 때)
내가 작업한 파이썬 스크립트는 selenium을 사용하는데 브라우저를 열어야 하다보니 DISPLAY 지정이 필요했다
crontab을 실행할 때 DISPLAY에 대한 환경변수가 지정되지 않아서 정상 동작하지 않았는데 stackoverflow에서 해답을 찾았다
먼저, PyVirtualDisplay와 Xvfb를 설치한다
pip3 install pyvirtualdisplay
sudo apt-get install xvfb
그리고 파이썬 스크립트에서 브라우저를 호출하는 코드에 윈도우 핸들러를 할당한다 (Visible = False)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from pyvirtualdisplay import Display
import time
# Display creates a virtual frame buffer and manages it for you
with Display(visible=False, size=(1200, 1500)):
driver = webdriver.Firefox()
driver.get("https://website-target.com")
time.sleep(1)
print(driver.current_url) # check connection
time.sleep(1)
print(driver.current_url)
driver.close()
나는 3번 방법을 통해 문제를 해결했다
'💻 programming' 카테고리의 다른 글
Jetson Nano에서 2D Pose estimation (TRT-Pose, Jetpack 4.2.2) (1) | 2023.01.04 |
---|---|
[트위터-티스토리] 트위터 오픈 API 등록하기, 개발자 계정 신청하기, tweepy 실시간 트렌드 가져오기 <3> (3) | 2022.12.29 |
[bash] 리눅스 터미널에 웰컴 메시지 출력하기 (0) | 2022.12.23 |
[SSH] 리눅스 로그인 웰컴 메시지 만들기 (0) | 2022.12.23 |
[트위터-티스토리] 티스토리 오픈 API 등록하기, Access token 발급받기, 카테고리 목록 가져오기 <2> (0) | 2022.12.21 |
댓글