【问题标题】:anacron script in cron.daily not running via symlinkcron.daily 中的 anacron 脚本未通过符号链接运行
【发布时间】: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 作为第一行开头?

标签: linux bash shell cron


【解决方案1】:

来自 debian/ubuntu 系统的 cron 手册页:

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

所以:

  • 文件需要由 root 拥有
  • 如果是symlink,源文件需要root拥有
  • 如果是符号链接,链接名称不应包含点

【讨论】:

  • 这修复了它!您可以通过运行以下命令(例如每天)测试您的脚本是否通过 cron 执行:# run-parts -v --report /etc/cron.daily
【解决方案2】:

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

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

我的解决方法:通过 root 的 cron 条目 (crontab -e) 运行该作业,然后按小时安排一次。

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 2018-01-09
    • 2019-11-24
    • 1970-01-01
    • 2017-09-24
    • 2021-03-20
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多