想给自己开发的程序做进程守护,比如要实现开机时启动某进程或某进程crash后要自动拉起来的功能。通过centos中init进程systemd
使用demo
启用qkdtest服务,当代理进程crash之后,守护进程会拉起进程。
1.将start和shutdown脚本放在和qkd可执行文件同一目录,
cd /home/qkd/
[root@localhost qkd]# ll
total 204
-rwxr-xr-x. 1 root root 23896 Feb 27 14:28 xxx.exe
-rwxr-xr--. 1 root root 349 Feb 27 15:31 shutdown.sh
-rwxr-xr--. 1 root root 423 Feb 27 15:30 startup.sh
2.创建软链接
sudo cd /usr/sbin
ln -sf /home/qkd/start.sh qkd_startup
ln -sf /home/qkd/shutdown.sh qkd_shutdown
3.创建qkdtest服务文件qkdtest.service,放在/usr/lib/systemd/system目录下,
执行命令:
systemctl daemon-reload //重新加载服务文件
systemctl start/stop/restart/status qkdtest.service //启动/停止/重启/查看qkd守护进程
pgrep qkdtest //查看守护进程
pkill qkdtest //杀死服务
ps -aux |grep xxx //查看代理进程
附:
1、qkdtest.service
[Unit]
Description=qkd server daemon
Documentation=no
After=no
Wants=no
[Service]
EnvironmentFile=no
ExecStart=/usr/sbin/qkd_startup
#ExecStart=/home/qkd/startup.sh //也可以
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/sbin/qkd_shutdown
#ExecStop=/home/qkd/shutdown.sh
KillMode=process
Restart=on-failure
RestartSec=10s //拉起时间间隔
2、startup.sh
#!/bin/bash
ps -ef |grep xxx |grep -v grep
if [ $? -eq 0 ];then
echo 'xxx server is running!'
else
netstat -apn |grep 1024
if [ $? -eq 0 ];then
PID_1024 = $(echo `netstat -apn |grep 1024 | awk '{print $NF}'|awk -F '/' '{print $1}'`)
kill $PID_1024
fi
echo "startup xxx server:"
cd /home/qkd
chmod +x xxx.exe
./xxx.exe
fi
3、shutdown.sh
#!/bin/sh
ps -ef | grep xxx| grep -v grep
if [ $? -eq 0 ];then
# PID_1024=$(echo `netstat -apn |grep 1024 | awk '{print $NF}'|awk -F '/' '{print $1}'`)
PID_1024=`ps -ef | grep xxx | grep -v grep | awk '{print $2}'`
kill -9 $PID_1024
echo 'xxx server has shutdown!'
else
echo 'Not found qkd_agt PID!'
fi