系统:Ubuntu18
目标:分别有两个python程序需要挂载到后台,并对其进行监控,若异常退出则重启(包括开机自启)。
软件:cron
(1)安装cron
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install cron
(2)本地日志配置
apt-get install rsyslog
配置:将corn.*前的#去掉即可,如下图所示:
vi /etc/rsyslog.d/50-default.conf
service rsyslog restart
service cron restart
(4)使用下面的命令可以查看cron的监控记录,比如你设置的10分钟扫描一次,那么正常的话该日志每10分钟就会新增一条记录
tail -f /var/log/cron.log
#!/bin/bash
cd /root/autodl-tmp/模型 && nohup /root/miniconda3/bin/python organization.py > auto2.log 2>&1 &
test2.sh如下:
#!/bin/bash
cd /root/autodl-tmp/zb_project && nohup /root/miniconda3/bin/python zb.py > auto.log 2>&1 &
cd /root/autodl-tmp/zb_project && nohup /root/miniconda3/bin/python zb.py > auto.log 2>&1 &
监控脚本monitor.sh如下:
#!/bin/bash
script_names=('test.sh' 'test2.sh') # 请替换为你的脚本名称
# 遍历每个脚本
for script_name in "${script_names[@]}"; do
# 使用ps命令查找进程
pid=`ps -ef | grep $script_name | grep -v grep | awk '{print $2}'`
# 检查进程是否存在
if [ -z "$pid" ]; then
echo "$script_name 已停止运行,正在重新启动..."
# 在这里,你需要根据实际情况启动你的脚本
echo "/root/autodl-tmp/auto_start/$script_name"
/bin/bash /root/autodl-tmp/auto_start/$script_name && echo "启动成功"
else
echo "$script_name 正在运行"
fi
done
设置可执行权限:
chmod +x test.sh
chmod +x test2.sh
chmod +x monitor.sh
在cron里面添加定时监控任务
# 命令行输入下面命令,然后回车
crontab -e
将monitor.sh打印的内容输出到error.log(>>是追加,>是覆盖),*/10代表的是10分钟扫描一次
# 回车后输入
*/10 * * * * /root/autodl-tmp/auto_start/monitor.sh >> /root/autodl-tmp/auto_start/error.log
cron开机自启
vi /etc/init.d/cron_start.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides: cron_start
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
service cron start
service rsyslog start
设置脚本权限
90表明一个优先级,越高表示执行的越晚 (优先级范围:0~90)
cd /etc/init.d/
chmod +x cron_start.sh
update-rc.d cron_start.sh defaults 90
设置自启动
update-rc.d cron_start.sh enable
查看全部服务列表:
sudo service --status-all
[+] –具有此标志的服务当前正在运行。
[–] –具有此标志的服务当前未运行。
[?] –没有 状态开关的服务。
拓展:
服务的启动停止状态
xxx为启动服务的(脚本)名字
sudo service xxx status
sudo service xxx start
sudo service xxx stop
sudo service xxx restart
移除开机启动脚本
sudo update-rc.d -f new_service.sh remove
update-rc.d的详细参数
使用update-rc.d命令需要指定脚本名称和一些参数,它的格式看起来是这样的(需要在 root 权限下):
update-rc.d [-n] [-f] <basename> remove
update-rc.d [-n] <basename> defaults
update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
update-rc.d <basename> start|stop <NN> <runlevels>
参数解析:
-n: not really
-f: force
disable|enable:代表脚本还在/etc/init.d中,并设置当前状态是手动启动还是自动启动。
start|stop:代表脚本还在/etc/init.d中,开机,并设置当前状态是开始运行还是停止运行。(启用后可配置开始运行与否)
NN:是一个决定启动顺序的两位数字值。(例如90大于80,因此80对应的脚本先启动或先停止)
runlevels:则指定了运行级别。
vi /etc/profile
#在末尾添加下面代码
export TZ='CST-8'
source /etc/profile
mv /etc/localtime /etc/localtime_bak
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
重启电脑