웹 기반 예약 시스템의 일부로 매일 PHP 스크립트를 실행하기 위해 cron 작업을 설정하려고 합니다. crontab에서 다음 명령을 사용하여 여러 Apache 서버에서 수년 동안 완벽하게 작동했습니다.
0 3 * * * wget -q -O /dev/null http://www.my_other_domain.org.uk/scheduled/my_script.php
방금 다른 Apache 서버에 스크립트를 설치했는데 브라우저를 통해 호출하면 올바르게 실행됩니다. 그러나 cron을 사용하려고 하면 cron 데몬이 다음 메시지를 표시합니다.
-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: wget: command not found
내가 시도할 때
0 3 * * * /usr/bin/env wget -q -O /dev/null http://www.mydomain.org.uk/scheduled/my_script.php
다음 메시지를 받았습니다.
-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: /usr/bin/env: No such file or directory
첫째, setlocale 경고가 문제와 관련이 없다고 가정하는 것이 맞습니까?
나도 시도했다
0 3 * * * /usr/bin/php /var/www/vhosts/mydomain/httpdocs/scheduled/my_script.php
이것은 만든다
-: /usr/bin/php: No such file or directory
또한 스크립트의 첫 번째 줄에 shebang을 넣고 cron에서 전체 경로로 호출하도록 시도해 보았습니다. cron 데몬은 /[full_path]/my_script.php에 해당 파일이나 디렉터리가 없다고 보고합니다.
컬을 사용하는 것은 그다지 좋지 않습니다.
서버에 대한 쉘 액세스 권한이 없으며 Plesk 제어판을 통해 cron 작업을 설정했습니다. 크론 작업이 예정대로 실행되고 있는 것 같습니다. 시스템 관리자는 나를 위해 다음을 수행했습니다.
#which php
/usr/bin/php
#which wget
/usr/bin/wget
#which curl
/usr/bin/curl
이는 명령이 올바른 위치에 있음을 확인하는 것 같습니다.
위의 내용은 간략한 역사입니다. 시도한 순열과 조합의 수를 잊어버렸습니다. 대부분 이 포럼과 다른 포럼에서 조언을 읽은 결과였습니다.
cron 작업이 명령을 찾을 수 없고 해결책을 제안할 수 없는 이유를 알려주실 수 있는 분 계십니까?
답변1
PATH
쉘은 환경에 설정된 내용을 확인하여 실행 파일을 찾을 위치를 알고 있습니다. cron
동일한 환경을 공유하지 마십시오. 이것을 crontab 상단에 추가하면 예상하는 명령을 찾을 수 있는 위치를 알려줄 것입니다.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
답변2
보고하신 증상에 따르면 이는 손상의 여지가 없으며 PATH
영향을 미치지 않습니다 /usr/bin/env
. 그러나 귀하의 보고서가 일관되지 않기 때문에 확신하기가 어렵습니다. /usr/bin/env
아니면 을 썼 나요 usr/bin/env
?
crontab에 ASCII 문자만 포함되어 있고, 분리할 수 없는 공백이나 인쇄할 수 없는 문자가 없는지 확인하세요. 또한 PATH
또는 와 같이 문제를 일으킬 수 있는 일부 환경 변수가 정의되어 있지 않은지 확인하세요 LD_LIBRARY_PATH
.
/usr/bin/env: No such file or directory
서버에 수정할 수 없는 잘못된 구성이 있다는 강력한 징후가 있는 경우 . 서버의 가상 환경이나 보안 프레임워크에서는 최소한 cron에서 명령을 실행할 수 없습니다. 서버가 실행되는 환경 유형을 모르면 어떤 문제가 발생할 수 있는지 아는 것은 불가능합니다. 이는 시스템 관리자가 해결해야 할 문제입니다.
이 setlocale
오류는 문제의 원인은 아니지만 다른 오류의 증상일 가능성이 높습니다.