我们有一个 cron 脚本,用于在我们的环境中运行 Salt 以及其他几个步骤,但由于某种原因,它根本没有执行它。
root@salt:~# cat /etc/cron.hourly/salt-apply.sh
#!/bin/bash
/bin/cat << EOF | /bin/bash 2>&1 > /var/log/salt-apply.log
/bin/date
cd /srv/salt
/usr/bin/git pull
/usr/bin/salt '*' saltutil.sync_all
/usr/bin/salt '*' state.apply
/bin/date
EOF
root@salt:~# ls -l /etc/cron.hourly/salt-apply.sh
-rwxr-xr-x 1 root root 199 Feb 7 22:47 /etc/cron.hourly/salt-apply.sh
它没有运行,/var/log/salt-apply.log 中没有错误,并且 cron 似乎正在运行每小时的运行部分:
root@salt:~# grep -i cron.hourly /var/log/syslog | tail -n 5
Feb 7 22:17:01 salt CRON[6941]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 7 23:17:01 salt CRON[8817]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 8 00:17:01 salt CRON[10450]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 8 01:17:01 salt CRON[12104]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 8 02:17:01 salt CRON[13761]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
是的,如果您只是在 shell 提示符下执行该脚本,该脚本运行良好。
任何帮助都将不胜感激。谢谢!
答案1
.sh
看起来这是文件名末尾的问题。我敢肯定我之前在 /etc/cron.* 中用.py
或.sh
后缀命名过脚本,所以这可能是一个错误...
任何状况之下:
root@salt:/etc/cron.hourly# ls
salt-apply.sh
root@salt:/etc/cron.hourly# run-parts --report /etc/cron.hourly --list
root@salt:/etc/cron.hourly# mv salt-apply.sh salt-apply
root@salt:/etc/cron.hourly# run-parts --report /etc/cron.hourly --list
/etc/cron.hourly/salt-apply
答案2
这可能与这个错误有关:https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022
尝试在命名脚本时不使用.sh
扩展名。