Linux 监视进程
有没有一种方法可以监视一个进程,如果它死掉了,可以调用一个脚本来恢复进程?我不久前写了一个脚本。也有更强大的解决方案,但这一个很简单,对我来说很有用。monitLinux 监视进程,linux,process,Linux,Process,有没有一种方法可以监视一个进程,如果它死掉了,可以调用一个脚本来恢复进程?我不久前写了一个脚本。也有更强大的解决方案,但这一个很简单,对我来说很有用。monit 或者,您可以删除while循环和sleep,并将脚本放入cron作业集中,以便每分钟运行一次。最简单的方法是让初始父级进行监视。例如 #!/bin/sh while true; do cmd # When you get here the process has died. start # the loop again
或者,您可以删除while循环和sleep,并将脚本放入cron作业集中,以便每分钟运行一次。最简单的方法是让初始父级进行监视。例如 #!/bin/sh while true; do cmd # When you get here the process has died. start # the loop again and restart it done #!/垃圾箱/垃圾箱 虽然真实;做 指令 #当你到了这里,这个过程就结束了。开始 #再次启动循环并重新启动它 完成 此脚本可能会被终止,因此您可能需要 捕捉信号,但对任何人都是如此 你可能会写的监视器。你可能会 如果cmd正在终止,还希望插入延迟 立即,或添加一些日志记录(调用记录器
在您调用cmd之后)。没有必要太过花哨。如果您使用的是SysV系统(而不是Upstart),您可以将do respawn进程放在inittab上 只需编辑/etc/inittab文件并添加如下行:
proc:12345:respawn:/path/to/process完成任务的方法有很多:
pgrep | wc-l
/etc/Supervisor/conf.d/forever.conf
中的以下监控器配置文件片段,它每秒显示一次日期和时间:
[program:forever]
command=/bin/bash -c 'while true; do echo "Current time is `date`"; sleep 1; done;'
程序永远以PID 15474开始:
derek@derek-lubuntu:~/Projects/fire$ sudo supervisorctl status forever
forever RUNNING pid 15474, uptime 0:00:17
derek@derek-lubuntu:~/Projects/fire$ sudo supervisorctl tail forever
Current time is Fri Jul 7 17:11:10 EDT 2017
Current time is Fri Jul 7 17:11:11 EDT 2017
Current time is Fri Jul 7 17:11:12 EDT 2017
Current time is Fri Jul 7 17:11:13 EDT 2017
Current time is Fri Jul 7 17:11:14 EDT 2017
Current time is Fri Jul 7 17:11:15 EDT 2017
Current time is Fri Jul 7 17:11:16 EDT 2017
Current time is Fri Jul 7 17:11:17 EDT 2017
Current time is Fri Jul 7 17:11:18 EDT 2017
Current time is Fri Jul 7 17:11:19 EDT 2017
Current time is Fri Jul 7 17:11:20 EDT 2017
Current time is Fri Jul 7 17:11:21 EDT 2017
Current time is Fri Jul 7 17:11:22 EDT 2017
Current time is Fri Jul 7 17:11:23 EDT 2017
Current time is Fri Jul 7 17:11:24 EDT 2017
Current time is Fri Jul 7 17:11:25 EDT 2017
永久终止进程,并且主管使用新进程ID 15760自动重新启动该进程:
derek@derek-lubuntu:~/Projects/fire$ sudo kill 15474
derek@derek-lubuntu:~/Projects/fire$ sudo supervisorctl status forever
forever RUNNING pid 15760, uptime 0:00:02
derek@derek-lubuntu:~/Projects/fire$ sudo supervisorctl tail forever
Current time is Fri Jul 7 17:11:21 EDT 2017
Current time is Fri Jul 7 17:11:22 EDT 2017
Current time is Fri Jul 7 17:11:23 EDT 2017
Current time is Fri Jul 7 17:11:24 EDT 2017
Current time is Fri Jul 7 17:11:25 EDT 2017
Current time is Fri Jul 7 17:11:26 EDT 2017
Current time is Fri Jul 7 17:11:27 EDT 2017
Current time is Fri Jul 7 17:11:28 EDT 2017
Current time is Fri Jul 7 17:11:29 EDT 2017
Current time is Fri Jul 7 17:11:30 EDT 2017
Current time is Fri Jul 7 17:11:31 EDT 2017
Current time is Fri Jul 7 17:11:32 EDT 2017
Current time is Fri Jul 7 17:11:33 EDT 2017
Current time is Fri Jul 7 17:11:34 EDT 2017
Current time is Fri Jul 7 17:11:35 EDT 2017
Current time is Fri Jul 7 17:11:36 EDT 2017
您可能会在serverfault上得到更好的答案。与其将问题“暂停作为非主题”,为什么不将其移到超级用户或服务器故障所在的位置?谢谢:)看起来对我来说非常合适。monit不提供一段时间内进程的图表/统计信息,对吗?只是一个指针。我扩展了我的答案。我现在认为这是最好的答案之一。然而,即使是以最初的形式,我的答案也并不比推荐Monit的答案更缺乏上下文(见stackoverflow.com/a/2354030/107158)。
derek@derek-lubuntu:~/Projects/fire$ sudo kill 15474
derek@derek-lubuntu:~/Projects/fire$ sudo supervisorctl status forever
forever RUNNING pid 15760, uptime 0:00:02
derek@derek-lubuntu:~/Projects/fire$ sudo supervisorctl tail forever
Current time is Fri Jul 7 17:11:21 EDT 2017
Current time is Fri Jul 7 17:11:22 EDT 2017
Current time is Fri Jul 7 17:11:23 EDT 2017
Current time is Fri Jul 7 17:11:24 EDT 2017
Current time is Fri Jul 7 17:11:25 EDT 2017
Current time is Fri Jul 7 17:11:26 EDT 2017
Current time is Fri Jul 7 17:11:27 EDT 2017
Current time is Fri Jul 7 17:11:28 EDT 2017
Current time is Fri Jul 7 17:11:29 EDT 2017
Current time is Fri Jul 7 17:11:30 EDT 2017
Current time is Fri Jul 7 17:11:31 EDT 2017
Current time is Fri Jul 7 17:11:32 EDT 2017
Current time is Fri Jul 7 17:11:33 EDT 2017
Current time is Fri Jul 7 17:11:34 EDT 2017
Current time is Fri Jul 7 17:11:35 EDT 2017
Current time is Fri Jul 7 17:11:36 EDT 2017