1

我该怎么做才能让这个脚本每天运行?

如果我手动运行脚本,它可以工作。我可以看到它做了它应该做的事情。(备份文件) 但是,它不会作为 cron.daily 脚本运行。我已经让它走了好几天没有碰它——它永远不会运行。

实际脚本在这里/var/www/myapp/backup.sh

这里有一个符号链接/etc/cron.daily/myapp_backup.sh -> /var/www/myapp/backup.sh

cron 日志/var/log/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以创建档案。

4

2 回答 2

5

从 debian/ubuntu 系统的 cron 手册页:

这些目录下的文件必须通过一些健全性检查,包括以下内容:可执行,由 root 拥有,不可由组或其他人写入,如果是符号链接,则指向 root 拥有的文件。此外,文件名必须符合运行部分的文件名要求:它们必须完全由字母、数字组成,并且只能包含特殊符号下划线('_')和连字符('-')。任何不符合这些要求的文件都不会被 run-parts 执行。例如,任何包含点的文件都将被忽略。

所以:

  • 文件需要由root拥有
  • 如果是符号链接,则源文件需要由 root 拥有
  • 如果是符号链接,则链接名称不应包含点
于 2017-04-17T15:30:50.803 回答
0

我在 cron.hourly 和 awstats 处理中遇到了类似的情况。

我认为它与 SELinux 和 anacron 有关,但没有与 cron 相同的权力/权限。ACTUAL 解决方案打败了我(到目前为止)。

我的解决方法:通过 root 的 cron 条目 (crontab -e ) 运行作业,并且只需每小时安排一次。

于 2013-11-22T17:47:57.953 回答