root
crontab에 작업을 추가했습니다.
# crontab -l | tail -n 1
*/3,13,29,43 * * * * /root/bin/check_network.sh
#
그러나 일반 사용자로 실행되는 것 같습니다 rwb
.
이 rwb
계정(이 root
계정 아님)은 작업 실패에 대한 이메일을 받고 있으며 실패 이유는 다음과 같습니다.
/root/bin/check_network.sh: line 26: iw: command not found
하지만 물론 iw
그랬지만 /use/sbin/iw
그렇지 root
않았습니다 $PATH
.rwb
어떻게 되어가나요? ! 루트 크론 작업을 어떻게 실행합니까?
고쳐 쓰다
명령을 에서 로 변경하면 작동하는 것처럼 보이므로 iw
cron을 실행할 때 일반 bash 창과 비교할 때 /usr/sbin/iw
약간의 차이가 있을 것입니다 .$PATH
답변1
su
crontab을 설정할 때 루트를 사용 하셨나요 ?
데비안 10에서는 다음과 man crontab
같이 말합니다:
su(8)은 crontab을 혼란스럽게 할 수 있으므로 su(8) 내에서 실행 중인 경우 항상 -u 옵션을 사용하여 안전한 편에 서야 합니다.
su
Debian 10 릴리스에서 Debian은 코드 베이스의 이전 명령을 삭제 shadow-utils
하고 코드 su
베이스 로 마이그레이션했습니다 util-linux
. 이로 인해 미묘한 변화가 많이 발생했습니다.
Debian 10의 기본 설정을 사용하면 여러 사람이 루트 액세스를 가질 수 있으며 원하는 경우 루트 권한을 사용할 때 자신의 개인 기본 설정이 적용됩니다. 그러나 결과적으로 su
or 을 사용하면 sudo -s
환경 변수가 불완전하게 변경됩니다. 예를 들어 rwb
일반 사용에서 일반 사용으로 변환한 후에도 환경 변수의 값은 그대로 유지됩니다.root
su
USER
rwb
일부 프로그램과 스크립트는 이 변수를 사용하여 사용자를 식별합니다.
따라서 거기에 있는 파일을 보면 cron 작업 정의가 실제로 가 아니라 에 /var/spool/cron/crontabs
있다는 것을 알 수 있을 것입니다 . 사실, 여전히 루트가 아닌 개인 crontab 파일을 편집했습니다./var/spool/cron/crontabs/rwb
/var/spool/cron/crontabs/root
"완전히 루트가 되어" 환경 변수를 완전히 다시 초기화하려면 su -
또는 를 사용해야 합니다 sudo -i
.
답변2
당신에게 문제가 있는 것 같습니다.환경;특히 cron
. 나는 2-3개의 다른 배포판(주로 데비안)을 망쳤습니다.환경항상 같은 것은 아닙니다. 나는 cron
그 환경이 무엇인지 알려주기 위해 약간의 트릭을 사용했습니다 .
다음 줄(또는 이와 유사한 줄)을 다음 줄에 추가합니다 crontab
.
@reboot /usr/bin/printenv > /home/my/cronenv.txt 2>&1
이를 대화형 셸에서 보고된 환경과 비교합니다( bash
이 경우).
pi@4b:~ $ printenv
보시다시피, 이 두 환경에는 큰 차이가 있습니다. 가지다환경 변화를 위한 다양한 솔루션cron
그러나 내 목적에 따라 실행 파일/명령에 대한 전체 경로를 호출하는 습관을 들이는 것만으로도 환경에 대한 대부분의 변경이 필요하지 않다는 것을 발견했습니다 cron
.
WRT 는 root's crontab
사용자의 것과 다릅니다 crontab
.
pi@4b:~ $ sudo crontab -e
root crontab
그러면 이전과 마찬가지로 완전히 다른 버전이 제공되어 환경의 차이점을 확인할 수 있습니다 user crontab
. 필요할 때printenv
root crontab
권한 증가직장 에서는 cron
이런갈 길.
일부 시스템에서는 다르게 처리될 수 있지만 내가 아는 데비안 기반 시스템에서는 잘 작동합니다. 작업/스크립트를 로 실행하고 있으므로 sudo
에 권한 상승을 입력할 필요가 없습니다.root crontab
cron
root