![设置服务的两个实例以在 Linux 上运行](https://linux22.com/image/118564/%E8%AE%BE%E7%BD%AE%E6%9C%8D%E5%8A%A1%E7%9A%84%E4%B8%A4%E4%B8%AA%E5%AE%9E%E4%BE%8B%E4%BB%A5%E5%9C%A8%20Linux%20%E4%B8%8A%E8%BF%90%E8%A1%8C.png)
本质上,我试图了解如何做的是修改一些我发现的脚本,以便在我闲置的 Linux Mint 机器上同时运行一个服务的两个实例。
设置服务的第一个实例我使用了此处的说明:
https://www.linode.com/docs/game-servers/host-a-terraria-server-on-your-linode
现在,我尝试按照这些说明进行更改,以使用相同的脚本创建第二个服务。
该服务不会启动并保持这种状态,尽管它在整个计算机重新启动之前已启动。我已将第二个 .service 文件放在与第一个 '/etc/systemd/system/' 相同的位置。服务文件的内容如下。
[Unit]
Description=server daemon for whim
[Service]
Type=forking
User=whim
KillMode=none
ExecStart=/usr/bin/screen -dmS whim /bin/bash -c "/opt/terraria/TerrariaServer.bin.x86_64 -config /opt/terraria/whimserverconfig.txt"
ExecStop=/usr/local/bin/whimd exit
[Install]
WantedBy=multi-user.target
现在我重新启动机器的首要原因是另一个错误。在此处的说明过程中,我设置了一个用于基本管理的脚本。它放置在与第一个相同的位置。 '/usr/local/bin/' 文件内容如下。
#!/usr/bin/env bash
send="`printf \"$*\r\"`"
attach='script /dev/null -qc "screen -r whim"'
inject="screen -S whim-X stuff $send"
if [ "$1" = "attach" ] ; then cmd="$attach" ; else cmd="$inject" ; fi
if [ "`stat -c '%u' /var/run/screen/S-whim/`" = "$UID" ]
then
$cmd
else
su - whim-c "$cmd"
fi
在服务停止工作之前,问题是我永远无法连接到新的whim.service 的屏幕。
所以我的问题是这样的:
我是否在修改这两个文件之一时出错了,或者我是否遗漏了一些更基本的东西?
答案1
terraria /bin/bash
更改名称时删除了以下空格,如下whim/bin/bash
所示。这使得您的服务单元和脚本文件的多个部分出现错误。
整个设计看起来相当不稳定,screen
作为一个系统范围的服务(以及它所需要的服务)运行,以便运行一个要求它作为服务交互的程序,但这不是你做的。