我想要一个守护程序,它可以将任意的通用脚本或命令转换为守护程序。
我有两种常见的情况要处理:
我有一个应该永远运行的脚本。如果它死了(或重新启动时),请重新启动它。永远不要让两个副本同时运行(检测一个副本是否已经在运行,在这种情况下不要启动它)。
我有一个简单的脚本或命令行命令,希望永久重复执行(两次运行之间有短暂的暂停)。再次,不允许脚本的两个副本同时运行。
当然,在案例2中围绕脚本编写一个“ while(true)”循环然后为案例1应用解决方案是很简单的,但是更通用的解决方案将直接解决案例2,因为这适用于案例1中的脚本,例如好(你可能只是想更短或没有停顿如果脚本不打算会死(当然,如果剧本真的没有永不再死暂停实际上并没有物质))。
请注意,该解决方案不应该涉及在现有脚本中添加文件锁定代码或PID记录。
更具体地说,我想要一个可以“运行”的程序“守护进程”
% daemonize myscript arg1 arg2
或者,例如
% daemonize 'echo `date` >> /tmp/times.txt'
它将不断增加的日期列表附加到times.txt。(请注意,如果要守护的参数是一个脚本,该脚本可以像上面的情况1那样永久运行,那么守护程序仍然会做正确的事,并在必要时重新启动它。)然后,可以在.login中输入上述命令和/或每小时或每分钟刷新一次(取决于我对它意外死亡的担心程度)。
注意:守护程序脚本将需要记住正在守护程序的命令字符串,这样,如果再次守护相同的命令字符串,它将不会启动第二个副本。
此外,理想情况下,该解决方案应该在OS X和linux上都可以工作,但是欢迎使用一种解决方案。
编辑:如果您必须使用调用它,这很好sudo daemonize myscript myargs
。
(如果我认为这一切都是错误的,或者有快速而肮脏的部分解决方案,我也很乐意听到。)
PS:如果有用,这是一个特定于python的类似问题。
而这个回答类似的问题有什么似乎是一个任意脚本的快速和肮脏的妖魔化一个有用的成语: