Crontab이 오류와 함께 실행 중입니다.

Crontab이 오류와 함께 실행 중입니다.

프로그래밍 방식으로 crontab을 사용하여 내 서버에서 일부 무서운 스파이더를 실행하려고 합니다. 여러 명령을 시도했는데 마침내 실행되지 않는 crontab이 생겼고 유용한 오류도 표시되지 않습니다.

#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours

이 crontab은 작동하지 않으며 syslog다음을 얻습니다.

Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)

출력 결과는 다음과 같습니다.

/bin/sh: 1: scrapy: not found

나는 scrapy를 설치했고 명령은 독립적으로 잘 작동합니다.

답변1

Cron은 기본적으로 실행되는 명령의 출력과 함께 사용자에게 메일을 보냅니다. 그러나 명시된 대로 MAT(Mail Transfer Agent)가 설치되어 있지 않으므로 cron은 메일을 보낼 수 없으며 명령 출력을 삭제합니다. cron 줄을 다음과 같이 변경하여 출력을 직접 파일이나 void(/dev/null)로 리디렉션할 수 있습니다.

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1

또는

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1

두 번째 가능성은 MTA(sendmail, postfix 또는 이와 유사한 것)를 설치하고 로컬 메일을 처리하도록 구성하는 것입니다.

또는 스크립트가 출력을 생성하지 않도록 할 수도 있습니다.

답변2

파일 scrapy은 어디에서도 찾을 수 없습니다 PATH(아래 참조). 위치를 찾으려면 대화형 셸에서 다음 명령을 사용하세요.

which scrapy

절대 경로(예: )가 표시됩니다 /usr/local/bin/scrapy. crontab에 절대 경로를 입력하십시오.

47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours

PATH변수 에 관해서

그만큼PATH변수는 명령줄이나 스크립트에서 정확한 경로를 지정하지 않을 때마다 프로그램을 검색하는 데 사용됩니다. 이는 프로필 설정과 crontab에 의해서도 정의됩니다. 일반적으로 다음과 같습니다.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

예제는 내 /etc/crontab. 그런데 crontab에 제공한 값이 이상해 보입니다…

PATH=/root/

설정하려고 하지 않나요?작업 디렉토리여기?!

Shebang에 관해서

오두막많은 스크립트의 첫 번째 줄입니다. 어떤 인터프리터가 파일을 해석할지 지정합니다. crontab에서는 의미가 없으므로 제거해야 합니다. 크론탭은데이터스크립트가 아닌 Cron용 파일입니다.

관련 정보