ubuntu设置开机启动运行python程序或服务
序言
最近在ubuntu服务器上部署了一套ocr服务,每次服务器启动的时候需要手动运行脚本未免太麻烦了,所以考虑加入开机自启。
网上搜了一下,答案基本上大同小异,几乎都是使用rc.local文件,但是ubuntu18 貌似是已经不支持rc.local 这个开机自动启动的脚本了,所以为了能继续用这个脚本,需要去编写一个ubuntu18 下的启动脚本,通过这个脚本来启动我的rc.local脚本,本文记录一下使用过程。
1. 创建一个re-local.service文件
sudo vi /etc/systemd/system/rc-local.service
将下列内容填写到文件中(不需要修改):
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99[Install]
WantedBy=multi-user.target
2. 创建rc.local文件
sudo vi /etc/rc.local
将下列内容复制到该文件中:
#!/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 下面三行是我的运行命令,可以根据自己需求修改
source /home/cai/anaconda3/bin/activate ocr
cd /home/cai/project/OCR_rec
gunicorn -c gunicorn_conf.py run:app &exit 0
需要注意的是,因为我项目中用到了conda的虚拟环境,但是在bash命令中,直接使用conda activate ocr会提示conda命令找不到,所以使用了source命令进行环境激活,但是如果直接source activate xxx的话还是会提示找不到activate该文件,所以需要使用绝对路径打开acvatie目录指定。
当然也可以自己创建一个.sh文件,然后将上述三行命令添加到该文件中,赋予权限后,在rc.local文件中就可以直接写成:bash xxx.sh,例如我创建了一个python.sh文件如下:
#!/bin/bash
source /home/cai/anaconda3/bin/activate ocr
cd /home/cai/project/OCR_rec
gunicorn -c gunicorn_conf.py run:app &
给定权限:
sudo chmod +777 python.sh
python.sh文件存放于/home/cai/目录下,在rc.local中即可写成:
#!/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 下面三行是我的运行命令,可以根据自己需求修改
bash /home/cai/python.shexit 0
上诉两种形式选其一即可。
3. 给rc.local 执行的权限
sudo chmod +x /etc/rc.local
4. 启动服务
sudo systemctl enable rc-local
5. 启动服务、检测服务状态、停止服务
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo systemctl stop rc-local.service
如果在输入检查服务状态命令中看到如下界面,即配置成功,重启后查看进程是否正常开启即可:

如果报错的话,检查自己的指令是否有书写问题,根据提示慢慢排查即可。
如果不需要设置开机启动了,把上述rc.local内的启动命令删除后重启即可。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
