crontab의 명령이 작동하지 않습니다

crontab의 명령이 작동하지 않습니다

crontab의 명령은 작동하지 않지만 터미널에서 동일한 명령을 실행하면 작동합니다.

[root@ds backup]# crontab -l
* * * * * find /opt/backup -type f -regextype posix-extended -not -regex '.*('$(sed 's/ /|/g' <<<$(echo {6..0} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y%m%d" | xargs echo))').*' &> /home/ocdn_adm/f.txt

#
#

2분 후에 다음 명령을 실행합니다.

[root@ds backup]# cat /home/ocdn_adm/f.txt
cat: /home/ocdn_adm/f.txt: No such file or directory

cron 명령을 실행할 수 없는 것 같습니다.

하지만 터미널에서 동일한 명령을 실행하면

[root@ds backup]# find /opt/backup -type f -regextype posix-extended -not -regex '.*('$(sed 's/ /|/g' <<<$(echo {6..0} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y%m%d" | xargs echo))').*' &> /home/ocdn_adm/f.txt
[root@ds backup]# cat /home/ocdn_adm/f.txt
/opt/backup/conf-backup-20180407.tar.gz

이상하게도 작동합니다. crontab에서 명령을 실행할 수 있나요?

답변1

이는 기본적으로 cron사용되지 않습니다 bash. 사용할 쉘도 지정해야 합니다 PATH. 예를 들면 다음과 같습니다.

SHELL=/bin/bash
PATH=~/bin:~/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin

* * * * * find /opt/backup -type f -regextype posix-extended -not -regex '.*('$(sed 's/ /|/g' <<<$(echo {6..0} | xargs -I{} -d ' ' date --date={}' days ago' +"\%Y\%m\%d" | xargs echo))').*' &> /home/ocdn_adm/f.txt

그 동안 X에 의존하는 명령이 제대로 작동할 수 있도록 디스플레이에 대한 정보도 추가하고 싶습니다.

DISPLAY=:0

cron 명령을 디버그하려면 syslog, 실행 정보 및 가능한 오류를 볼 수 있습니다.

tail -f /var/log/syslog

올바른 명령의 출력 예 xset m 1 1:

May 11 14:29:01 cage CRON[25152]: (Ctrl-C) CMD (xset m 1 1)

관련 정보