我正在尝试运行 run.sh 脚本来启动游戏服务器管理面板。我创建了一个服务来在启动时运行它。当我sudo systemctl start servicename.service
在控制台中输入时它工作正常,但在启动时它似乎崩溃了。
[Unit]
Description=Name Here
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/scriptname_start.sh
RemainAfterExit=yes
User=username
Group=usergroup
TimeoutStartSec=180
[Install]
WantedBy=multi-user.target
scriptname_start.sh 内容
#!/bin/bash
screen -dm bash -c 'bash /home/my/directory/run.sh +set serverProfile profilename +set Port 12345'
来自脚本所有者的文档
需要在监控模式下从 FXServer 内部启动,为此,只需执行不带任何 +exec 参数的 run.sh 即可。
面板错误 (面板在没有服务的情况下运行良好,所以我不认为这是面板的问题)
Restarting server (server partial crash detected).
[04:46:17][FXRunner] >> [1918] FXServer Exited.
[04:46:17][FXRunner] >> [1918] FXServer Closed. (code null)
[04:46:19][FXRunner] >> [2040] FXServer Started!
有什么问题吗?
多谢!
附言。我是新手,所以越详细越好 x))
Journalctl --unit= Fivemtxadmin.service -b
[root@server ~]# journalctl --unit=fivemtxadmin.service -b
-- Logs begin at Sun 2020-06-21 05:19:00 CEST, end at Sun 2020-06-21 05:19:23 CEST. --
Jun 21 03:19:01 server.domain.eu systemd[1]: Starting FiveM TxAdmin...
Jun 21 03:19:01 server.domain.eu systemd[1]: Started FiveM TxAdmin.
systemctl 状态 5mtxadmin.service
[root@server ~]# systemctl status fivemtxadmin.service
● fivemtxadmin.service - FiveM TxAdmin
Loaded: loaded (/usr/lib/systemd/system/fivemtxadmin.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-06-21 03:19:01 CEST; 2h 2min ago
Process: 822 ExecStart=/usr/bin/fivemtxadmin_start.sh (code=exited, status=0/SUCCESS)
Main PID: 837 (screen)
CGroup: /system.slice/fivemtxadmin.service
├─ 837 /usr/bin/SCREEN -dm /bin/bash -c bash /home/username/fivem/f...
├─ 843 /home/username/fivem/fx-server/alpine/opt/cfx-server/ld-musl...
└─2077 /home/username/fivem/fx-server/alpine/opt/cfx-server/ld-musl...
Jun 21 03:19:01 server.domain.eu systemd[1]: Starting FiveM TxAdmin...
Jun 21 03:19:01 server.domain.eu systemd[1]: Started FiveM TxAdmin.
答案1
从您提供的信息来看,尚不清楚问题是什么,但您可以检查以下几点:
对单元文件进行更改后,您必须运行
systemctl daemon-reload
以触发这些文件的重新加载。通过运行手动启动服务
sudo systemctl start servicename.service
并验证其启动没有任何问题。如果您没有看到任何输出,就是这种情况。跑步
systemctl status servicename.service
。验证它是否报告服务正在运行。还要验证该服务是否“已启用”。如果不是这种情况,请执行sudo systemctl enable servicename.service
此操作。重新启动机器并检查服务是否再次运行。
如果服务无法启动,请运行journalctl -u servicename.service
以查看脚本已打印的任何日志消息。
关于您的脚本的一些想法:
确保您在服务文件中指定的用户有权执行该脚本。
您的脚本未指定它调用的命令的完整路径。该路径通常会在您登录时为您的 shell 设置。
PATH
在系统引导期间启动服务时,可能不会设置环境变量,因此最好在脚本中使用绝对路径,如下所示:#!/bin/bash /usr/bin/screen -dm /bin/bash -c '/bin/bash /home/my/directory/run.sh +set serverProfile profilename +set Port 12345'
检查您的脚本是否需要网络以外的任何设备启动。也许缺少依赖项?如果添加
sleep 10
到脚本的开头“修复”了您的问题,情况可能就是这样。错误消息很可能是由在 控制下运行的进程打印的
screen
。要查看它们,您需要附加screen -r 837
(上面提供的输出中的 PID)。如果需要,请在按Ctrl+后使用光标键滚动Esc。
答案2
具体问题的答案是,我只需Type=idle
在一切启动后使用并启动该服务。