1:背景描述
最近根据工作需要,需要服务实现开机自启动的效果,因为平时只使用过nohup的后台挂起操作,很少接触开机,镜像装机服务自启动的功能,因此,这里简单记录一下。
注意,开机自启动和上面的hohup的表现不一样,开机自启动保证了系统重启,新开的机器都会自动运行该服务,而nohup只是后台挂起,服务伴随系统的生命周期,当
机器重启,服务自动停止,不会自动运行
2:实现步骤
(1)进入到/etc/systemd/system目录下,
cd /etc/systemd/system
里面很多软链接,如下
这里有目录也有文件,文件的后缀都是.service
,目录内的文件也是.service
的文件,都是系统命令可以直接启动systemctl
。
(2)编写service文件
这里我以一个test.py文件为例,想要实现它的开机自启动,这里可以仿照其中的一个.service文件内容为例,做了如下修改。
源.service文件
[Unit]
Description=API Server <-----------------服务描述需要改
After=syslog.target network.target <-----------------------设置你要自启动服务要在哪些服务启动之后启动,比如网络状态[Service]
Type=simple
NotifyAccess=all
TimeoutStartSec=0
TimeoutStopSec=10min
Restart=always <------------------------这个配置设置了后,即便人为杀掉进程,也会自动重启服务
User=api
ExecStart=/usr/bin/api --config-file /etc/api/api.conf <------------启动服务时的执行命令[Install]
WantedBy=multi-user.target
按照上面描述的需要修改的内容,新建一个叫 test.service的文件,保存后退出
[Unit]
Description= Test Print Hello World
After=syslog.target network.target[Service]
Type=simple
NotifyAccess=all
TimeoutStartSec=0
TimeoutStopSec=10min
Restart=always
User=root
ExecStart=python3 /home/lwh/test.py[Install]
WantedBy=multi-user.target
(3)设置自启动
创建软链接,允许systemctl启动
systemctl enable test
结果如下
root@vm10-0-0-75:/etc/systemd/system# systemctl enable test
Created symlink /etc/systemd/system/multi-user.target.wants/test.service → /etc/systemd/system/test.service.
启动test服务
systemctl start test
查看服务进程
root@vm10-0-0-75:/etc/systemd/system# ps aux | grep python
root 12987 0.0 0.0 14904 8488 ? Ss 17:34 0:00 /usr/bin/python3 /home/lwh/test.py
root 12999 0.0 0.0 6432 652 pts/0 S+ 17:34 0:00 grep --color=auto python
说明启动成功
(4)重启系统验证
reboot -n
这里 -n 表示跳过重启时的init步骤
重启后再次查看进程如下结果
说明设置自启动成功
3:取消开机自启动
systemctl stop test.service # 停止服务
systemctl disable test.service #清除软链接
rm -f test.service # 删除写的自启动文件