Answers:
您通常会/var/run/
在Redhat / CentOS风格的系统中找到用于守护进程的PID文件。
简而言之,您始终可以查看流程初始化脚本。例如,SSH守护程序是使用中的脚本启动的/etc/init.d/sshd
。有时会在此处定义PID(搜索pid,PID,PIDFILE,PID_FILE等)。
但是,RHEL风格的系统上的其他大多数守护程序都会/etc/init.d/functions
为一些常见功能提供脚本。
# 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将在包装脚本中定义(希望如此)。我认识的大多数开发人员都遵循与上述守护程序相同的约定。
如果确实遇到了没有PID文件的情况,请记住Monit也可以在进程字符串模式中进行监视。
monit procmatch anything
在命令行上尝试时,我得到了 monit: invalid argument -- procmatch
。有任何想法吗?
monit -V
)哪个操作系统/发行版?
我采取的另一种方法:
我有一个以嵌入式模式运行的数据库服务器,数据位于包含应用程序的目录中。
该数据库具有类似.pid文件的内容,但是将其称为锁定文件。为了找到此锁定文件,我列出了该应用程序保持打开状态的所有文件:
$ ls -l /proc/18264/fd | cut -d'>' -f2
那给了我很长的清单,包括套接字,管道,服务器文件等。过滤器很少,我可以满足我的需要:
$ 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
.pid
文件。该应用程序(或其启动脚本)需要显式创建一个。