# 使用 `systemctl` 配置服务.并且使其自启动 ## 新增服务 > [!note] > ubuntu 21.04 ### 定义服务 在 `/lib/systemd/system/` 目录下创建文件 `serverName.service` > [!warning] > serverName 替换为自己需要的服务名称,可以直接执行下面的代码 修改文件,使用`vim`来进行编辑, 在shell ```shell vim /lib/systemd/system/serverName.service ``` 通过`vim`打开`serverName.service`后继续输入下方代码,其中的 `server` 替换成执行任务 ```shell [Unit] Description=fraps service After=network.target network-online.target syslog.target Wants=network.target network-online.target [Service] Type=simple #要启动的命令(此处根据实际情况填写) ExecStart= #server 执行的任务,此注释替换新的 [Install] WantedBy=multi-user.target ``` ### ps 如果该服务需要使用到网络,则需要在`[Unit]`下添加 ```shell After=network.target network-online.target syslog.target Wants=network.target network-online.target ``` ### ps 如果添加了网络配置还是提示无效,则可以使用自动重启功能 ```shell [Service] Restart=always RestartSec=3 ``` #### 参数解释 1. 重启策略 Restart - Restart=always 服务退出后总是重启 - Restart=on-failure 服务退出后重启,除非退出代码为0 - Restart=on-abnormal 服务退出后重启,除非退出代码为0,或者由于信号而退出 - Restart=on-success 服务退出后重启,只有退出代码为0时才重启 - Restart=on-abort 服务退出后重启,只有退出代码为0时才重启 - Restart=never 服务退出后不重启 2. 重启间隔 RestartSec - RestartSec=3 服务退出后3秒后重启 - RestartSec=30s 服务退出后30秒后重启 - RestartSec=1min 服务退出后1分钟后重启 3. 重启次数 Limit - LimitRestart=3 服务退出后重启3次 ### 启用服务 ```shell sudo systemctl enable serverName ``` ### 启动服务进程 ```shell sudo systemctl start serverName ``` ### 常用命令 > [!tip] > 常用命令基本上分为 start restart stop #### **启动服务进程** ```shell sudo systemctl start serverName ``` #### **重启服务** ```shell sudo systemctl restart serverName ``` #### **关闭服务** ```shell sudo systemctl stop serverName ``` #### **启用服务** ```shell sudo systemctl enable serverName ``` #### **停用服务** ```shell sudo systemctl disable serverName ``` ### 问题解决 > [!warning] > 如果重新修改了服务文件需要执行`systemctl daemon-reload`重新加载 > Warning: The unit file, source configuration file or drop-ins of githook.service changed on disk. Run > 'systemctl daemon-reload' to reload units. ```shell systemctl daemon-reload ``` ## 日志查看 > [!tip] > 查看服务日志使用 `journalctl -u 服务名` > `journalctl`用来查看`systemctl`搜集到的日志,可以用来调试排查问题. 据说是`systemctl`携带的 ### 使用示例 查看服务名为`githook`的服务日志 ```shell journalctl -u githook.service ``` ### 更多使用技巧 1. **查看最近的日志** 携带参数`n`加数字可以看到最近`n`条日志 代码示例 ```shell journalctl -n 100 -u githook.service ```