本篇文章讲解Linux 开机自启动程序
Linux开机自启动在项目中应用很常见,突然停电或者故障,程序总归要关掉的,如果手动去启动程序,比较麻烦,所以开机自启动是非常重要的一环。
在Debian或者Ubuntu中,开机之后会调用一个脚本文件:/etc/rc.local,所以在这个文件中写好要启动的程序即可。Debian linux发行版系统现在可能没有rc.local文件了,不过没有关系,直接在/etc文件下新建一个rc.local文件即可,开机就会运行该程序。
所以只要在该文件中直接启动你的程序即可,或者也可以启动一个脚本文件(.sh),在这个脚本文件中启动要启动的程序,下面就是rc.local文件内容的实例。
#!/bin/bash -e
location="/home/debian" #脚本路径
cd $location
$location/rc.sh
$location/run.sh
exit 0
上面的rc.local文件中就另行启动了脚本文件(rc.sh)来运行自己的程序,以下就是rc.sh的内容,启动gateway程序。
#!/bin/sh
location=/home/debian/gateway20191211
echo $location
cd $location
find $location/log -mtime +7 -type f |xargs rm -f
out=$(date "+%Y-%m-%d")".txt"
pwd
$location/gateway >> $location/log/$out
细心的朋友可能还发现其实上面rc.local运行了两个脚本,但是实际运行过程中只启动了第一个,这是因为第一个程序运行还没有结束,就不会运行第二个程序,所以这样基本上就不会个程序同时启动。
如果要同时启动两个程序,则需要这样来写脚本文件,将两个脚本文件相与。
#!/bin/bash -e
location="/home/debian" #脚本路径
cd $location
$location/run.sh & $location/GetPID.sh
exit 0
此外如果还需要设计一个进程看门狗,监控该程序是否运行,则可以这样来写脚本:(先获取进程PID,然后再监控该PID是否存在)
#!/bin/bash
while true
do
process=gateway #监控的程序运行名
pid=$(ps -ef|grep $process |grep '/home/debian' | grep -v grep |awk '{print $2}')
echo $pid
if [ $pid -ne 0 ]
then #如果程序PID在,则程序在运行
echo `date`
echo “pid is exitable!”
else #否则程序没有运行,需要启动程序 启动的程序在run.sh文中。
echo `date`
echo "pid isnot exitable!"
sudo sh run.sh >> $(date "+%Y-%m-%d")".txt"
fi
sleep 15s
done
exit 0
该脚本一开机就运行,监控程序PID,如果发现没有,立即启动,15s检查一次。
注意:本文归作者所有,未经作者允许,不得转载