systemctl是管理大多数现代Linux VPS发行版上服务的主要工具。它控制由systemd管理的服务,包括Web服务器、数据库、机器人、游戏服务器守护进程、监控工具以及您自己创建的自定义服务。
在下面的示例中,将nginx替换为您正在管理的服务。常见的服务名称包括nginx、apache2、mariadb、mysql、docker、sshd以及自定义名称如arkserver或discordbot。
检查服务
在重启服务之前使用status。它显示服务是否正在运行,是否在启动时启用,以及最近的错误输出。
sudo systemctl status nginx
下面的截图使用SSH服务作为示例;相同的输出布局适用于其他systemd服务。

如果输出显示failed,请在反复重启之前阅读错误行。
您还可以使用journalctl查看日志:
sudo journalctl -u nginx --since "30 minutes ago"
在重启或测试服务时跟踪实时日志:
sudo journalctl -u nginx -f
启动、停止、重启和重新加载
| 命令 | 功能 |
|---|---|
sudo systemctl start nginx | 启动已停止的服务。 |
sudo systemctl stop nginx | 停止正在运行的服务。 |
sudo systemctl restart nginx | 停止并重新启动服务。 |
sudo systemctl reload nginx | 在不完全重启的情况下重新加载配置,如果服务支持重新加载。 |
sudo systemctl reload-or-restart nginx | 如果可能则重新加载,否则重启。 |
当您只更改了配置文件并且服务支持时,使用reload。当应用程序需要完全停止/启动以应用更改时,使用restart。
启用或禁用开机启动
现在启动服务和在启动时启用它是不同的操作。如果您希望服务在VPS重启后恢复,请启用它。
sudo systemctl enable nginx sudo systemctl start nginx
要在一个命令中启用并启动它:
sudo systemctl enable --now nginx
要阻止它在启动时自动启动:
sudo systemctl disable nginx
重启多个服务
您可以将多个服务名称传递给许多systemctl命令:
sudo systemctl restart nginx php8.2-fpm mariadb
这在更改多个服务相互依赖的堆栈后很有用,例如Web服务器、PHP-FPM和数据库。
使用通配符
systemctl可以使用通配符匹配服务名称。这很有用,但要小心使用,因为它可能影响到比您预期更多的服务。
例如,这将显示所有匹配的PHP-FPM服务:
systemctl list-units 'php*-fpm.service'
在检查匹配项后,您可以重启匹配的服务:
sudo systemctl restart 'php*-fpm.service'
在使用restart、stop或disable时,始终先列出匹配项。
创建自定义服务
您可以为游戏服务器、机器人或脚本创建自定义systemd服务,以便它在启动时启动并可以使用systemctl进行管理。
在/etc/systemd/system/中创建一个单元文件:
sudo nano /etc/systemd/system/myserver.service
一个简单的服务文件如下所示:
[Unit] Description=My custom server After=network.target [Service] Type=simple User=myuser WorkingDirectory=/home/myuser/myserver ExecStart=/home/myuser/myserver/start.sh Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
创建或更改服务文件后,重新加载systemd以便它识别新的单元:
sudo systemctl daemon-reload
然后启用并启动它:
sudo systemctl enable --now myserver
检查它:
sudo systemctl status myserver sudo journalctl -u myserver -f
如果服务失败,请检查ExecStart中的路径、User、文件权限,以及启动脚本在手动运行时是否正常,然后再尝试通过systemd运行。
