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。您必须指定使用的 shell 以及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)

相关内容