我正在设置monit,并希望监视给定的python应用程序。 Monit通过查看进程的.pid文件来做到这一点,但是我不知道这会是什么。
我也尝试创build我自己的简单的可执行文件,并运行它 – 我也无法弄清.pid文件的创build位置。
并且所有进程都有一个.pid文件吗?
您通常会在Redhat / CentOS风格的系统上的/var/run/find守护进程的PID文件。
简而言之,您可以随时查看进程初始化脚本。 例如,SSH守护进程使用/etc/init.d/sshd的脚本启动。 有时PID将在那里定义(searchPID,PID,PIDFILE,PID_FILE等)。
但是,RHEL风格系统上的大多数其他守护程序都会为/etc/init.d/functions脚本提供一些常用function。
# Set $pid to pids from /var/run* for {program}. $pid should be declared # local in the caller. # Returns LSB exit code for the 'status' action. __pids_var_run() { local base=${1##*/} local pid_file=${2:-/var/run/$base.pid}
对于任何来源于/etc/init.d/functions东西,PID将存在于/var/run/*.pid 。
对于自定义应用程序,PID将在包装脚本中定义(希望)。 尽pipe我认识的大多数开发人员都遵循与上面的守护程序相同的约定。
如果你遇到没有PID文件的东西,记得Monit也可以监视一个进程string模式 。
我采取的另一种方法:
我有一个以embedded模式运行的数据库服务器,数据位于包含应用程序的目录中。
数据库有一个像.pid文件,但它调用它locking文件。 要find这个locking文件,我列出了应用程序打开的所有文件:
$ ls -l /proc/18264/fd | cut -d'>' -f2
这给了我一个很长的名单,包括套接字,pipe道,服务器文件等几个filter,我得到了我所需要的:
$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan /windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb /windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0 /windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck /windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck