Linux系统使用服务实现开机自启动
众所周知,有的应用程序需要再开机时自启动,如服务器的ssh等,在linux系统上可以通过服务来实现。
systemd 单元配置文件
~/.config/systemd/user/ 和 /etc/systemd/system/ 是两个重要的目录,用于存放 systemd 单元配置文件,它们分别用于用户级别和系统级别的服务管理。
1. ~/.config/systemd/user/
这个目录用于存放用户级别的 systemd 单元配置文件。用户级别的服务一般用于当前用户的特定需求,与整个系统的运行无关。
例子:
~/.config/systemd/user/example.service: 用户级别的服务单元配置文件。
2. /etc/systemd/system/
这个目录则是用于存放系统级别的 systemd 单元配置文件,系统级别的服务可以对整个系统进行配置,对所有用户都生效。
例子:
/etc/systemd/system/nginx.service: 系统级别的 Nginx 服务单元配置文件。
/etc/systemd/system/ssh.service: 系统级别的 SSH 服务单元配置文件。
区别与使用场景:
用户级别服务:存放在 ~/.config/systemd/user/ 目录下,适用于只针对当前用户有效的服务配置。比如,个人使用的特定定时任务或后台服务。
系统级别服务:存放在 /etc/systemd/system/ 目录下,适用于整个系统的服务配置。比如,网络服务、数据库服务等。
使用方法:
创建新的服务单元:可以在相应目录下创建新的 .service 文件,并按照 systemd 单元的规范进行配置。
启用和管理服务:使用 systemctl 命令来启用、停止、重启和管理服务。比如,systemctl enable example.service 可以启用服务,使其在系统启动时自动运行。
流程
[1]. cd 到单元配置文件的路径中( ~/.config/systemd/user/或/etc/systemd/system/)
[2]. 创建如下格式的文件(myservice.service)
[Unit]
Description=My Program
[Service]
ExecStart=/path/to/myprogram
[Install]
WantedBy=default.target
其中:My Program改为该服务需要的描述;/path/to/myprogram改为自己的应用程序路径;default.target代表了系统启动时默认加载的目标,这一项可以改为如下表所示的target。
目标(Target) | 含义 |
---|---|
poweroff.target | 用于关机。 |
rescue.target | 用于系统恢复。 |
multi-user.target | 多用户文本模式。加载多个用户所需的服务,不包括图形化用户界面。 |
graphical.target | 图形化用户界面。加载图形化用户界面所需的服务。 |
network.target | 网络服务。加载网络相关的服务,如网络配置、网络连接等。 |
default.target | 默认目标。通常链接到系统中的某个其他目标,指定系统启动时默认加载的目标。 |
[3] 重新加载systemd 单元配置文件(根据需要选择重新加载用户级别systemctl --user daemon-reload
或者系统级别systemctl daemon-reload
)
[4] 启用服务(根据需要选择重新加载用户级别systemctl --user enable myservice.service
或者系统级别systemctl enable myservice.service
)
[5] 如需立马生效则可手动启动服务(根据需要选择重新加载用户级别systemctl --user start myservice.service
或者系统级别systemctl start myservice.service
)
注意
- 在服务中如果启动程序为sh脚本文件,sh脚本文件中需要在文件头写
#!/bin/bash
- 可以通过
systemctl status myservice.service
查看服务状态