Centos 7에서 cronjob에 대한 새 시스템 계정을 만들고 이에 대한 cronjob을 설정했습니다.
하지만 내 cronjob이 오류와 함께 실행되지 않습니다.
(CRON) ERROR chdir failed (/home/sysagent): No such file or directory
현재 sysagent 계정의 crontab은 다음과 같습니다:
15 16 * * * HOME="/tmp" && cd path/to/project_folder && ./src/mainroutine.sh | ts "[\%Y-\%m-\%d \%H:\%M:\%S]" >> /var/log/automation/sysagent.log
조사한 후 HOME 변수를 추가하고 프로젝트 폴더(쉘 스크립트의 전체 경로가 있었던 폴더)에 cd'd를 추가했지만 도움이 되지 않았습니다. cronjob이 홈 디렉토리를 잊게 만드는 방법은 무엇입니까? 왜 그것을 찾고 있습니까?
답변1
문서가 잘못되었거나 잘못되었다고 가정하면 소스 코드는 다음과 같이 설명합니다.
% rpm -qa | grep cron
cronie-1.4.11-17.el7.x86_64
cronie-anacron-1.4.11-17.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
...RPM의 URL이 손상되었기 때문에 일부 altagoobingleduck이 여기에 옵니다...
% git clone https://github.com/cronie-crond/cronie && cd cronie
% fgrep -rl 'chdir failed' .
./src/security.c
cron_change_user_permanently
...그래서 오류는 코드의 다른 여러 위치에서 호출된 호출의 한 위치에만 나타납니다.
% grep cron_change_user_permanently **/*.c
src/do_command.c: if (cron_change_user_permanently(e->pwd, env_get("HOME", jobenv)) < 0)
src/do_command.c: if (cron_change_user_permanently(e->pwd, env_get("HOME", jobenv)) < 0)
src/popen.c: if (cron_change_user_permanently(pw, env_get("HOME", jobenv)) != 0)
src/security.c:int cron_change_user_permanently(struct passwd *pw, char *homedir) {
...그래서 모든 경우에 HOME
환경 변수는 chdir
사용자의 위치를 결정하는 데 사용되는 것으로 나타나며 chdir
해당 디렉터리에는 항상 하나가 있습니다. 따라서 해당 HOME
디렉토리가 존재하는지 또는 HOME
올바르게 설정되었는지 확인해야 합니다.앞으로 cron_change_user_permanently
호출됩니다(이는 cron 작업의 셸 코드가 표시되기 전에 발생할 수 있습니다). (또는 cronie
다른 작업을 수행하기 위한 원숭이 패치이지만 이는 아마도 매우 나쁜 생각일 것입니다.)
답변2
cron
사용자의 를 실행할 때 crontab
사용자의 홈 디렉토리에서 시작하려고 합니다. 변수의 초기값은 /etc/passwd
(간단한 경우)에서 나옵니다. HOME
항목을 덮어쓰려고 할 때 crontab
$ cron
{HOME}에 대한 변경을 시도했습니다.