crontab에서 실행할 때 환경 변수의 값을 확인하기 위해 간단한 스크립트를 만들었습니다.
#!bin/bash
echo $USER > cron.txt
script.sh
저는 홈디렉토리에 저장합니다 . 수동으로 실행하면 cron.txt
예상대로 내 사용자 이름이 포함됩니다.
그런 다음 crontab에 다음 줄을 추가합니다.
*/1 * * * * ./script.sh
cron.txt
다시 한 번 내 사용자 이름을 포함하고 싶지만 지금은 비어 있습니다.
crontab에서 스크립트를 실행할 때 왜 $USER
정의되지 않습니까?
답변1
cron이 작업을 실행할 때 현재 쉘 환경과 다른 환경에서 작업을 수행합니다.
예를 들어, 이는 ./script.sh
찾을 수 없음을 의미합니다.
두 가지 솔루션이 있습니다.
*/1 * * * * ( cd $HOME/mydir && ./script.sh )
또는
*/1 * * * * $HOME/mydir/script.sh
즉, 스크립트를 찾을 수 있는 정확한 위치를 지정하십시오.
스크립트에서 출력 파일에 대해 절대 경로 이름을 사용하지 않는 경우 첫 번째 옵션이 더 나을 수 있습니다.
두 번째 옵션을 선택하는 경우 출력 파일의 위치를 알 수 있도록 스크립트를 수정합니다.
#!/bin/bash
echo "$USER" >"$HOME/mydir/cron.txt"
또는
#!/bin/bash
( cd "$HOME/mydir" && echo "$USER" >cron.txt )
줄에는 #!
올바른 절대 경로가 포함되어야 합니다 bash
(귀하의 경로는 상대 경로임).
또한 일부 Unices(Linux)의 cron은 USER
cron 작업을 실행하는 사용자의 사용자 이름으로 설정되지 않습니다. 이러한 시스템에서는 $LOGNAME
스크립트를 호출할 때 다음을 대신 사용하거나 다음으로 설정하십시오 USER
.$LOGNAME
*/1 * * * * env USER=$LOGNAME $HOME/mydir/script.sh