前言
之前有一篇文章,讲述了windows系统上设置开机自启的相关方法。
关于Linux的开机自启,常见的是自定义服务,并设置开机自启,但也有一些坑需要注意,特记此文,分享给大家
前提
本文中所使用的系统:Ubuntu 22.04
服务管理器:systemd
一、自定义服务
Linux中一切皆文件,服务也不例外,同样是通过一个文件来定义的
一般存放在此路径下: /etc/systemd/system
基本步骤:
- 切换到目录
- 创建文件your_service_name.service
- 编辑文件,写入配置
cd /etc/systemd/system
touch your_service_name.service
# 注意:编辑system目录下的文件需要管理员权限,
# 所以要么使用root账号,
# 要么给当前登录账号分配管理权限
sudo vi your_service_name.service
打开your_service_name.service,填入下面内容(忽略注释)
[ Unit]
# 服务简要描述
Description=The example service desc
# 在xxx服务之后启动,若无依赖,则不需要配置
After=network.target
# 这里是服务的相关执行内容配置
[Service]
# 可直接复用
Type=simple
# systemctl start/restart/stop service_name真正执行的脚本
# 这里可以配置脚本,也可以直接配置命令
ExecStart=/home/xxx/xxx/Start.sh
ExecReload=/home/xxx/xxx/Reload.sh
ExecStop=/home/xxx/xxx/Stop.sh
# 什么情况下自动重启
Restart=on-failure
# 启动服务使用的用户
User=root
# 启动服务的用户所在的用户组
Group=root
# 服务启动的工作目录
WorkingDirectory=/home/xxx/xxx
# 可直接复用
[Install]
WantedBy=multi-user.target
二、调试验证以及注意事项
1.重载systemd配置
目录 /etc/systemd/system 下文件出现增删改后,需要重载systemd配置
sudo systemctl daemon-reload
2.验证并设置为开机自启
# 启动
sudo systemctl start your_service_name
# 重启
sudo systemctl restart your_service_name
# 停止
sudo systemctl stop your_service_name
上面命令执行后,查看一下服务状态
systemctl status your_service_name
启动后的状态
设置开机自启
sudo systemctl enable your_service_name
3.注意事项
- your_service_name.service中ExecStart、ExecStop、ExecReload配置可执行之后,对应的systemctl start/restart/stop命令才能执行成功,否则会超时失败
- systemctl start命令会在后台挂起运行,所以Start.sh脚本中
不需要nohup等自动挂起命令
,否则会启动失败- 也不要通过相关daemon配置。Start.sh文件最终应该是服务启动态,而不是直接执行结束。如果执行结束,则会出现:服务启动后立刻进入dead状态
- 配置好之后,启动、关闭、重启命令都要验证一下
- 设置开机自启后,重启机器验证一下
出现问题后排查方法
# 查看服务的状态
systemctl status your_service_name
# 查看服务是否自启
sudo systemctl list-unit-files --type=service | grep your_service_name
# 查看服务依赖
sudo systemctl list-dependencies your_service_name
# 查看系统日志
journalctl -xeu your_service_name
# 重启机器
sudo reboot -f
# 或
sudo shutdown -r now
总结
本文讲述了在Ubuntu系统上,自定义服务过程和注意事项。
实现类似功能还有其他方法,比如crontab命令,感兴趣的同学可以自行查询资料实现,这里不再赘述。
有其他问题,请留言,看到会回复
最好的祝愿!