【问题标题】:What is the risk when editing crontab file without the "crontab -e" command?在没有“crontab -e”命令的情况下编辑 crontab 文件有什么风险?
【发布时间】:2014-07-24 04:49:53
【问题描述】:
我开发了一个脚本,其中我使用echo 命令向 crontab 文件添加行,并使用sed 命令删除行。
我不知道这样做的风险,尤其是我在某些网站上发现我们必须使用编辑 crontab 文件
crontab -e
- 不使用
crontab -e会有什么风险?
- 是否存在我的编辑不会在 cron 中考虑的风险
时间表?
- 我应该使用
/etc/init.d/cron restart 重新启动 cron 吗?
【问题讨论】:
标签:
linux
bash
shell
cron
【解决方案1】:
使用常规编辑器编辑 crontab 文件时,计划不会更新。系统仍会像编辑前一样执行计划任务。这会让管理员发疯。
当 cron 重新启动时,例如重新启动或重新启动进程,将读取当前的 crontab 文件并按照当前当前文件中的描述安排进程。
我记得向 cron 进程的 PID 发送了一个“kill -HUP”或“kill -15”,以强制该进程刷新缓存并再次读取 crontab 文件。
【讨论】:
-
HUP根据this site-1 or -HUP - This argument makes kill send the "Hang Up" signal to processes ... Most daemons are programmed to re-read their configuration when they receive such a signal.是对的
【解决方案2】:
不使用crontab 编辑或替换 cronfile 的主要风险是直接写入 cronfile(包括使用 sed 这样做)不会锁定文件,因此两个同时编辑可能会产生不可预测甚至灾难性的后果.
您不必使用crontab -e;以下形式的编辑是半安全的,因为它们不会随机组合两个编辑。 (但它们仍然不安全;编辑可能会被覆盖):
添加行:
{ crontab -u user -l; echo "$this"; echo "$this_too"; } | crontab -u user -
删除行或进行更复杂的编辑:
crontab -u user -l | sed "$my_wonderful_sed_script" | crontab -u user -
无论如何,您都不需要重新启动cron。它会注意到 cronfile 的修改时间发生了变化。