PATH 및 SHELL이 올바르게 설정되었음에도 불구하고 crontab에서 특정 명령을 실행하는 데 문제가 있습니다.
이것은 기계의 환경입니다:
SHELL=/bin/bash
USER=ubuntu
MAIL=/var/mail/ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
cron 환경은 다음과 같습니다(동일해 보임).
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
PWD=/home/ubuntu
그런 다음 crontab에서:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
SHELL=/bin/bash
*/1 * * * * "whoami"
*/1 * * * * "whoami && which whoami"
첫 번째 whoami
작업은 성공하지만 두 번째 작업은 다음과 같이 실패합니다.
/bin/bash: whoami && which whoami: command not found
which
발견되지 않았기 때문입니다 . 그러나 이것은 이상합니다.
$ which whoami
/usr/bin/whoami
$ which which
/usr/bin/which
/usr/bin
cron의 PATH에 있습니다 . 무엇을 제공합니까?
답변1
크론 작업을 참조하면 안 됩니다.
당신은
*/1 * * * * "whoami && which whoami"
말 그대로 이라고 불리는 명령어입니다 whoami && which whoami
. 예를 들어 /usr/bin/whoami && which whoami
. 분명히 이 명령은 존재하지 않습니다. 명령이 올바르게 해석되도록 따옴표를 제거하십시오.
*/1 * * * * whoami && which whoami
답변2
일반적으로 말해서, 하나의 cron 작업에서 여러 명령을 실행하려면 해당 명령을 스크립트에 넣어야 합니다.
이와 같은 선언에는 큰따옴표를 추가하면 안 됩니다. 문자 그대로라고 볼 수 있습니다. 인라인으로 실행하려는 경우 다음을 수행할 수 있습니다.bash -c 'whoami && which whoami'
하지만 이 시점에서는 명령을 쉘 스크립트에 넣어야 합니다.