使用服务启动一个新的、共享的 tmux 会话(并分离)

使用服务启动一个新的、共享的 tmux 会话(并分离)

我正在尝试使用systemctl在新的共享会话中启动进程tmux。我确信我的tmux命令已全部设置好:

  • 我已使用共享组设置套接字路径。
  • 该服务正在属于该组成员的用户下执行
  • 我已经从 CLI 进行了测试并且它可以工作;我可以附加另一个帐户。

该命令如下所示:

tmux -S /tmp/tmux/sharedsesh new-session -s sharedsesh -d "/usr/bin/java server.jar"

但是,当我将其放入新的 systemctl 单元时,我收到错误:“tmux:未知选项 -- S”。由于这是大写的 S,我想知道这是否意味着它无法访问套接字或类似的东西?

单元文件:

[Unit]
After=network.target

[Service]
WorkingDirectory=/srv/workspace
PrivateUsers=true
User=servhost
Group=servhost
ProtectSystem=full
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true

ExecStart=/usr/bin/tmux -S /tmp/tmux/sharedsesh new-session -s sharedsesh -d "/usr/bin/java server.jar"

我查看了服务下的安全指令,但最终还是出现了错误。而且,我仍然想知道为什么它不知道 S 选项 - 我运行的命令与我在控制台上执行的命令相同,那么为什么它是未知的?

== 编辑 ==========

好的,就像经常出现的情况一样,发布之后我就发现了我的问题。

事实上我的ExecStart线路很好 - 错误来自我后续的控制,可能是下一个:(语法错误

ExecReload=/usr/bin/tmux send-keys -S /tmp/tmux/sharedsesh "reload" Enter
                         ^ -S should be here               ^ send-keys here

我要辩解的是,我收到的错误消息journalctl没有显示行号。另外,我没想到这一点,因为我没想到它们会运行。

这导致了我的下一个问题:现在我已经修复了语法,很明显服务在启动后立即停止(并且Stopping timed out. Terminating.启动错误)。

我猜我真正的问题是我的单元文件出了问题?还是不systemd喜欢分离方式tmux?还是其他原因?

答案1

看来答案是我需要Type=forking在 Service 节中进行设置。接下来我必须弄清楚如何让服务管理器知道它是故意停止的(当会话终止时,控制进程认为这是崩溃)。但至少服务器tmux和会话仍然存在,我可以与其他用户连接。

相关内容