微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

监视进程

有没有一种方法可以监视进程,如果它死了,是否可以调用一个脚本,从而使进程恢复?

计算使用的总处理器时间

Windows 7 Professional 64位下的printf性能不佳

从/ proc / net / sockstat获取networking连接

一个进程分叉时,共享库.so仍然在地址空间中吗? 那构造函数会被再次执行吗?

服务需要产生非交互式的subprocess,但是由于“访问被拒绝”

#!/bin/bash while true do if pgrep myprocess >/dev/null ;then echo "up" else echo "down" /path/to/myprocess & fi sleep 60 done

或者你可以删除while循环和睡眠,并把脚本设置为每分钟运行的cron作业

monit的。

http://mmonit.com/monit/

我前一段时间写了一个叫relight的文章 。 还有更强大的解决方案,但这个很简单,适合我。

最简单的做法是让最初的父母进行监控。 例如,

#!/ bin / sh的

而真实的; 做

CMD

#当你到达这个过程已经死了。 开始

#再次循环并重新启动它

DONE

这个脚本可能会被杀死,所以你可能想要捕捉信号,但是你可能写的任何监视器也是如此。 如果cmd正在立即终止,您可能还需要插入延迟,或者添加一些日志记录(在调用cmd后调用记录器)。 没有必要变得花俏。

如果你使用的是SysV系统(不是Upstart),你可以把这个进程重新生成inittab。

只需编辑你的/ etc / inittab文件添加一行就可以了:

PROC:12345:重生:/路径/到/处理

有很多方法来完成任务:

正如其他人所建议的那样 – 运行脚本来检查进程是否正在运行,如果没有运行,请重新启动进程。 要检查进程是否正在运行,可以使用pgrep <process name> | wc -l pgrep <process name> | wc -l

使用watch命令在某个时间间隔后运行脚本来检查进程是否正在运行,如果没有,则重新启动进程

创建一个父进程,这将始终寻找子进程,如果子进程崩溃或停止,父进程将被通知,然后重新启动新进程。

systemd是大多数主要Linux发行版上可用的复杂进程管理器。

使用您在简单配置文件中指定的命令 , Supervisor可以启动,监视和重新启动意外死亡的进程。

考虑在/etc/supervisor/conf.d/forever.conf的以下Supervisor配置文件片段,它/etc/supervisor/conf.d/forever.conf显示日期和时间:

[program:forever] command=/bin/bash -c 'while true; do echo "Current time is `date`"; sleep 1; done;'

程序forever以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

杀死forever进程,Supervisor使用新进程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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐