systemctl 在控制台中输入时有效,但在服务器启动时无效

systemctl 在控制台中输入时有效,但在服务器启动时无效

我正在尝试运行 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

从您提供的信息来看,尚不清楚问题是什么,但您可以检查以下几点:

  1. 对单元文件进行更改后,您必须运行systemctl daemon-reload以触发这些文件的重新加载。

  2. 通过运行手动启动服务sudo systemctl start servicename.service并验证其启动没有任何问题。如果您没有看到任何输出,就是这种情况。

  3. 跑步systemctl status servicename.service。验证它是否报告服务正在运行。还要验证该服务是否“已启用”。如果不是这种情况,请执行sudo systemctl enable servicename.service此操作。

  4. 重新启动机器并检查服务是否再次运行。

如果服务无法启动,请运行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在一切启动后使用并启动该服务。

相关内容