尝试将游戏服务器作为服务运行

尝试将游戏服务器作为服务运行

我正在尝试使用 monit 检查我的游戏服务器,如果失败则重新启动它。monit 部分相当简单,可以检查端口 28960,但如果 monit 检测到失败,我很难运行启动脚本 (cod4.sh)。

到目前为止我有:monitrc:

    set daemon  60
# set log /var/log/monit.log
set mailserver 127.0.0.1
# set mail-format { from: monit@mydomain }
set alert [email protected]
set httpd port 2812
   allow alec:password

check host dels with address 127.0.0.1
start program = "/bin/systemctl start cod4"
stop program = "/bin/systemctl stop cod4"

if failed port 28960 then restart`

这有效,如果我关闭服务器,我就会收到一封电子邮件。

我创建了一个服务文件 cod4.service

[Unit]
Description=Cod4 service

[Service]
User=cod4
Type=forking
ExecStart=/cod4-linux-server/cod4.sh


[Install]
WantedBy=multi-user.target

cod4.sh 由以下部分组成:

#!/bin/bash
screen -dmS cod4 ./cod4x18_dedrun +set r_xassetnum "xmodel=1200" +set sv_authorizemode "0" + set sv_maxclients "64" +set fs_game "mods/rotu2beta" +exec server.cfg +map_rotate

当我尝试启动服务器但service cod4 start什么也没有发生时,我可能是以错误的方式进行了处理,或者像往常一样通过拼凑来自不同站点的代码而使其变得过于复杂。

基本上,monit 会检查端口 28960,如果出现故障,则需要运行 cod4.sh。

请问有什么想法吗?

我认为有一点进步,

systemctl daemon-reload
systemctl enable cod4.service

我现在明白了

systemctl status cod4
● cod4.service - Cod4 service
   Loaded: loaded (/lib/systemd/system/cod4.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mon 2019-11-11 16:01:22 EST; 52s ago
  Process: 17788 ExecStart=/cod4-linux-server/cod4.sh (code=exited, status=0/SUCCESS)
 Main PID: 17790 (code=exited, status=0/SUCCESS)

这表明它确实执行了 cod4.sh,然后按应有的方式退出,但是lsof -i用户 cod4 告诉我服务器没有运行。

那么su cod4 cd/cod4-linux-server ./cod4.sh正确加载服务器和

[Service]
User=cod4
Type=forking
ExecStart=/cod4-linux-server/cod4.sh


[Install]
WantedBy=multi-user.target

答案1

谢谢你,Kamil,你的第一条评论很正确,让我意识到了 Ubuntu 的另一个奇怪之处,让我来解释一下这里发生了什么。

Monit 运行正常,cod4.service 文件正确,并且确实在被询问时运行。

当服务运行时,它会查找 cod4.sh 脚本/cod4-linux-server/,发现没有问题,但./cod4x18_dedrun由于某种原因,它在脚本内部找不到它。将其更改为 即可/cod4-linux-server/cod4x18_dedrun

因此,如果您从 systemd 运行脚本,并且该脚本与其启动的二进制文件位于同一文件夹中,则您仍然需要绝对了解二进制路径!

干杯

相关内容