crontab에서 스크립트를 실행할 때 $USER 환경 변수가 정의되지 않았습니다.

crontab에서 스크립트를 실행할 때 $USER 환경 변수가 정의되지 않았습니다.

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은 USERcron 작업을 실행하는 사용자의 사용자 이름으로 설정되지 않습니다. 이러한 시스템에서는 $LOGNAME스크립트를 호출할 때 다음을 대신 사용하거나 다음으로 설정하십시오 USER.$LOGNAME

*/1 * * * * env USER=$LOGNAME $HOME/mydir/script.sh

관련 정보