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)