提示:本文中介绍如何把一个文件通过bash脚本注册到系统服务,实现开机自启动
前言
脚本后台运行有很多方式,可以通过shell,也可以通过nohup,但是通过shell运行方便注册到系统服务,这样脚本会开机自启动。
本文中第一节描述如何用shell让脚本在后台运行并开机自启动,第二节描述了如何使用nohup使脚本在后台运行,不会因为会话的终止而结束运行。
1.python脚本后台运行并且开机自启动
- 准备需要开机运行的python文件test1.py、test2.py
# test1.py
if __name__ == "__main__":
while(1):
print("i am test1.py, i am running")
# test2.py
if __name__ == "__main__":
while(1):
print("i am test2.py, i am running")
准备HelloTest.sh脚本如下:
#!/bin/bash
cd /home/xxx
/home/xxx/anaconda/envs/xxx/bin/python test1.py & /home/xxx/anaconda/envs/xxx/bin/python test2.py
- 修改脚本权限:
sudo chmod +x /home/xxx/test1.py
sudo chmod +x /home/xxx/test2.py
sudo chmod +x /home/xxxx/HelloTest.sh
测试编写的脚本文件是否有bug:
/usr/bin/bash /home/xxx/HelloTest.sh
- 向系统注册服务,在目录
/etc/systemd/system
下添加HelloTest.service:sudo vim HelloTest.service
,内容如下:
[Unit]
Description=svc-test
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=no //退出后不会重启,always表示退出后会一直重启
RestartSec=1
User=root
ExecStart=/usr/bin/bash /home/xxxx/HelloTest.sh // 必须为绝对路径
[Install]
WantedBy=multi-user.target
- 重载系统服务
sudo systemctl daemon-reload
- 将服务注册为开机启动
sudo systemctl enable HelloTest.service
- 重启设备验证py文件是否在运行
sudo reboot
ps -aux | grep python #查看正在运行的python代码
- 如果更换了脚本内容,需要重启服务
sudo systemctl start HelloTest #启动服务
sudo systemctl stop HelloTest #停止服务
sudo systemctl restart HelloTest #重启服务
sudo systemctl status HelloTest #查看服务状态
2.python脚本输出日志文件
- 后台启动python脚本,并输出日志到
p_log.log
文件中
[xxx@single xxx]# nohup python p_test.py > p_log.log 2>&1 &
- 可以使用 >dev/null 2>error.log 只记录程序的异常日志
[xxx@single xxx]# nohup python p_test.py >/dev/null 2>p_error.log 2>&1 &
- nohup执行不打印日志
[xxx@single xxx]# nohup python p_test.py >dev/null 2>&1 &