【发布时间】:2017-04-17 23:30:50
【问题描述】:
我该怎么做才能让这个脚本每天运行?
如果我手动运行脚本,它可以工作。我可以看到它做了它应该做的事情。 (备份文件) 但是,它不会作为 cron.daily 脚本运行。我已经放了它好几天没有碰它——它永远不会运行。
实际脚本在这里/var/www/myapp/backup.sh
这里有一个符号链接/etc/cron.daily/myapp_backup.sh -> /var/www/myapp/backup.sh
/var/log/cron 的 cron 日志显示 anacron 正在运行此脚本:
Aug 19 03:09:01 ip-123-456-78-90 anacron[31537]: Job `cron.daily' started
Aug 19 03:09:01 ip-123-456-78-90 run-parts(/etc/cron.daily)[31545]: starting myapp_backup.sh
Aug 19 03:09:01 ip-123-456-78-90 run-parts(/etc/cron.daily)[31559]: finished myapp_backup.sh
但没有证据表明该脚本实际上做了什么。
以下是这些文件的安全信息:
ls -la /var/cron.daily
<snip>
lrwxrwxrwx 1 root root 25 Aug 12 21:18 myapp_backup.sh -> /var/www/myapp/backup.sh
</snip>
ls -la /var/www/myapp
<snip>
drwxr-xr-x 2 root root 4096 Aug 13 13:55 .
drwxr-xr-x 10 root root 4096 Jul 12 01:00 ..
-rwxr-xr-x 1 root root 407 Aug 12 23:37 backup.sh
-rw-r--r-- 1 root root 33 Aug 12 21:13 list.txt
</snip>
名为list.txt 的文件被backup.sh 使用。
脚本只是运行tar 来创建存档。
【问题讨论】:
-
这很可能是“程序路径”问题。最确定的解决方案是硬编码脚本中所有 cmd 的路径。如果您这样做并且有效,那么您就知道问题所在,并且更容易获得有关如何解决问题的建议。祝你好运。
-
可以显示
backup.sh的内容吗?从cron.daily运行符号链接应该可以工作。 -
@010110110101 - 您可能会检查 SELinux 是否已启用并可能阻止作业运行 - 使用“sestatus”并查看它是否正在执行。此外,检查 /var/log/audit 以获取潜在线索。
-
我注意到某些版本的 anacron/cron(特别是在 debian 上)不喜欢扩展名(例如 .sh)并且对文件名非常挑剔。可能不是您的问题,因为您的输出显示 anacron 开始工作,但它可能会在未来帮助其他人。更多信息请查看this answer。
-
您的脚本是否以#!/bin/bash 作为第一行开头?