关于systemd
用过Linux的一般都会比较熟悉systemd
,这里就简单介绍一下
systemd
是一种系统和服务管理器,systemd
是Linux系统中PID
为1
的进程,负责启动所有其他进程和服务。它在内核加载后接管系统,负责初始化用户空间、管理系统的服务、依赖、资源和日志等
目前几乎所有Linux发行版中都会使用systemd
作为初始化系统和管理服务的组件
常用命令
systemd
提供了一个强大的工具systemctl
来管理服务和系统状态,下面介绍一些常用命令
systemctl start <service_name> # 启动服务
systemctl stop <service_name> # 停止服务
systemctl restart <service_name> # 重启服务
systemctl status <service_name> # 查看服务状态
systemctl daemon-reload # 重新加载systemd的配置文件
systemctl enable <service_name> # 设置服务开机自启
systemctl disable <service_name> # 取消服务开机自启
journalctl -u <service_name> # 查看服务日志
systemd-analyze blame # 显示每个服务的启动耗时
配置systemd服务
有时候我们某个程序或脚本希望使用systemd
管理,那么需要编写一个配置文件将其加入systemd
管理
首先需要创建一个systemd
服务文件,例如xxx.service
nano /etc/systemd/system/xxx.service
然后写入以下内容(适用于大多数情况)
[Unit]
Description = This is xxx service
After = network.target
Wants = network.target
[Service]
Type = simple
ExecStart = /usr/bin/mycommand --option
Restart = always
[Install]
WantedBy = multi-user.target
参数解释:
Description:自定义服务的描述信息,说明作用
After:network.target表示网络服务可用后才能启动
Wants:network.target表示服务"希望"依赖network.target,但不是强依赖,如果network.target不可用,服务仍然会尝试启动
Type:simple是默认服务类型,表示ExecStart定义的进程是主进程,且启动后会持续运行
ExecStart:启动服务时执行的具体命令
Restart:always表示如果命令意外退出会自动重启
WantedBy:multi-user.target表示支持多用户模式
上述内容一般需要修改Description
和ExecStart
部分
如果配置没问题的话,执行systemctl start xxx
就可以启动服务了,或者执行systemctl enable xxx
可以配置服务开机自启
写在最后
因为有时候有些应用程序或脚本需要通过命令行启动并在后台长期运行,这样每次开机都要重新手动执行,需要停止的时候还得从把它进程中杀掉,而通过systemd
服务就可以更方便地控制这些常用应用或脚本的执行