我想要一个守护程序,可以把一个任意的,通用的脚本或命令变成一个 Daemon。
我想要处理两个常见的案例:
我有一个脚本,应该永远运行。如果它曾经死亡(或重新启动) ,重新启动它。不要让两个副本同时运行(检测一个副本是否已经在运行,在这种情况下不要启动它)。
我有一个简单的脚本或命令行命令,我想永远重复执行(运行之间有一个短暂的停顿)。同样,不要允许脚本的两个副本同时运行。
当然,在情况2中编写一个关于脚本的“ while (true)”循环,然后在情况1中应用一个解决方案是微不足道的,但是一个更通用的解决方案将直接解决情况2,因为这也适用于情况1中的脚本(如果脚本不打算永远消失,你可能只是想要一个更短的或没有暂停(当然,如果脚本真的 是的永远不会消失,那么暂停实际上并不重要))。
注意,这个解决方案不应该涉及,比如说,向现有脚本中添加文件锁定代码或 PID 记录。
更具体地说,我想要一个程序“妖魔化”,我可以像这样运行
% daemonize myscript arg1 arg2
或者,举个例子,
% daemonize 'echo `date` >> /tmp/times.txt'
它将保持一个不断增长的日期列表附加到 times.txt。(注意,如果要守护的参数是像上面的情况1那样永远运行的脚本,那么守护仍然会做正确的事情,必要时重新启动它。)然后我可以在我的。每小时或每分钟登录和/或 cron 它(取决于我对它意外死亡的担心程度)。
注意: 守护脚本需要记住它正在守护的命令字符串,这样,如果同一个命令字符串再次被守护,它就不会启动第二个副本。
此外,理想的解决方案应该可以同时在 OS X 和 Linux 上工作,但是欢迎针对其中一种的解决方案。
编辑: 如果您必须使用 sudo daemonize myscript myargs
调用它,那么没问题。
(如果我的想法完全错误,或者存在快速而肮脏的部分解决方案,我也很乐意听到这种说法。)
PS: 如果有用的话,这是也是一个类似的 Python 特有的问题。
这个对类似问题的回答似乎是一个有用的习惯用法,用于快速而肮脏地妖魔化任意脚本: