cron은 PATH에서 일부 명령을 찾지만 다른 명령은 찾지 않습니다.

cron은 PATH에서 일부 명령을 찾지만 다른 명령은 찾지 않습니다.

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/bincron의 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'

하지만 이 시점에서는 명령을 쉘 스크립트에 넣어야 합니다.

관련 정보