我有一个运行 Ubuntu 9.10 的计算机实验室。登录这些计算机的大多数人都是来自 LDAP 服务器的用户,而不是本地用户。我们发现,如果 LDAP 用户的 crontab 中有一个标记为待运行的条目@reboot
,则该命令实际上不会在机器重启时运行。
我很确定这是因为 cron 守护程序在网络完全启动之前启动,因此不会加载和运行或检查任何 LDAP 用户的 crontab @reboot
。事实上,cron 将在重新启动后完全忽略 LDAP 用户的 crontab,直到该用户再次运行 crontab -e 并保存,或者直到 cron 守护程序重新启动。
我们可以通过在 /etc/crontab 中添加以下行来解决此问题的一部分:
@reboot root /bin/sleep 45 && /etc/init.d/cron restart
因此,当 cron 在重新启动时重新启动时,它会等待网络启动,然后重新启动 cron 守护程序。这解决了 LDAP 用户完全无法读取 crontabs 的问题。但是,由于重新启动的是 cron 守护程序而不是计算机,因此@reboot
条目将被忽略。
有没有办法让用户在重新启动守护进程时运行命令,而不是重新启动?或者对这个整体问题有更好的解决方案?
谢谢。
答案1
听起来你有一个竞争条件,其中 cron 正在扫描它的标签并且因为无法访问网络/LDAP 服务器而找不到其中一些的有效用户——你需要确保在 cron 启动之前可以访问你的用户列表。
尝试调整您的 RC 序列,以便在网络完全启动后才启动 cron(通过重新排列 rc.d 或在 cron 脚本中标记它需要networking
首先启动)。