SHELL脚本中将守护进程的PID写入到文件

日常到运维工作中,比如编写一下守护进程的启动脚本,常常需要将该进程到PID记录到文件中去,用来对该进程进行关闭,监控等……

场景一:

使用nohup将进程丢到后台运行:

$ nohup sleep 100 > /dev/null 2>&1 &
$ echo $! > $PIDFILE

场景二:

使用su命令,以另一个用户的权限启动守护进程

$ id
uid=0(root) gid=0(root) groups=0(root)

$ su -m nobody -c 'nohup sleep 100 > /dev/null 2>&1 & echo $! ' > $PIDFILE

场景三:

当在场景二中启动守护进程的时候,需要使用SHELL变量的时候,这个时候就需要使用双引号,但是这个时候echo $!就无法捕获守护进程的PID了;

$ SLEEP_TIME=100
$ su -m nobody -c "nohup sleep $SLEEP_TIME > /dev/null 2>&1 & echo \$! " > $PIDFILE

参考资料:

Getting the process-id out of command launched with “su -c”

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload CAPTCHA.