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)

関連情報