golang 应用程序的服务文件

Cal*_*eng 6 systemd

因此,我编写了一个 golang 应用程序,systemd每当我的服务器重新启动时,我都希望对其进行初始化。

这是服务文件:-

[Unit]
Description=golang wiki initialization

[Service]
Type=forking
PIDFile=/tmp/gowiki.pid-3030
User=root
Group=root
WorkingDirectory=/var/www
ExecStart=/bin/bash -c 'daemonize -o stdout.log -e stderr.log /var/www/wiki'

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

每当我重新启动服务器时,它似乎都能很好地工作,但是当我gowiki在终端中手动启动或重新启动时,我仍然遇到了一些令人恼火的问题:-

systemctl start gowiki
Run Code Online (Sandbox Code Playgroud)

或者

systemctl restart gowiki
Run Code Online (Sandbox Code Playgroud)

这确实让我的 gowiki 进程运行;然而,在我执行我的systemctl start gowiki命令后,我被冻结在我的终端中,并且在我手动强制按下 Ctrl-C 之前,该命令似乎不会退出。

我做错了什么导致这个问题?

Cal*_*eng 9

这奏效了。

[Unit]
Description=golang wiki initialization

[Service]
PIDFile=/tmp/gowiki.pid-4040
User=root
Group=root
WorkingDirectory=/var/www
ExecStart=/bin/bash -c '/var/www/wiki'

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

因为Type=forking服务期望父服务在服务实际启动之前退出。如果父进程从不退出,那么 systemctl start 不会给你回提示,因为它认为它没有完成执行。