사용자 정의 crontab이 작동하지 않습니다(FreeBSD)

사용자 정의 crontab이 작동하지 않습니다(FreeBSD)

다음 명령을 사용하여 crontab.custom 파일을 만들었습니다.

*/1 * * * * /home/username/data/www/run.sh  

다음 run.sh을 포함합니다:

php script.php  

그 후에 이 명령을 실행합니다 crontab crontab.custom.

이제 crontab -l내 임무로 돌아가자.

cron을 다시 시작했지만 호출되지 않았습니다 /etc/rc.d/cron restart. script.php작동하게 하려면 어떻게 해야 합니까?

답변1

이는 귀하의 구성이 구성되지 않았기 때문일 수 있습니다 $PATH. php셸에서 실행 하려고 하면 실제로 실행 파일을 찾을 디렉터리 목록인 php절대 대상을 찾습니다 . $PATH이는 귀하의 환경에 설정되어 있지만 cron은 해당 환경을 공유하지 않습니다(실제로 하나가 비어 있거나 설정되지 않았을 수 있음 $PATH). 여러 가지 솔루션이 있습니다(최고부터 최악까지).

  • $PATH상단에 다음과 같은 내용을 추가하여 crontab을 설정하세요.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • 스크립트에서 실행 파일의 전체 경로를 사용하십시오 php(이것은 좋지 않습니다. 사용자는 필요한 경우 다른 바이너리를 사용하기 위해 환경에서 PATH를 재정의할 수 있어야 합니다).

  • $PATH스크립트에서 명시적으로 설정합니다(같은 이유로 좋지 않습니다).

답변2

아래와 같이 쉘 스크립트 상단에 다음 줄을 추가하십시오.

#!/bin/bash

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

그런 다음 cron 작업을 사용하십시오.

crontab -e

답변3

crontab 파일의 문제는 cron에서 실행할 때 다른 환경과 관련되는 경우가 많습니다. 아직 파일을 제공하지 않았으므로 run.sh다음은 몇 가지 문제 해결 팁입니다.

  1. 직접 /home/username/data/www/run.sh명령줄에 입력하고 작동하는지 확인하세요.
  2. 스크립트에서 모든 경로가 명시적으로 전체 경로로 설정되어 있는지 확인하세요.
  3. 데이터를 올바른 위치에 추가했는지 확인합니다. crontab -ecrontab 파일을 편집할 수 있습니다.
  4. cron을 사용할 수 있는 권한이 있는지 확인하세요. 사용자 이름은 /var/cron/allow파일이 아닌 /var/cron/deny파일에 있어야 합니다.
  5. /var/log/cron의 출력을 확인하세요.

관련 정보