用于启动我的应用服务器的 systemd 脚本 - “Unit”部分中的未知左值“StartLimitIntervalSec”

use*_*349 11 linux upstart systemd ubuntu-16.04

我有一个如下所示的新贵配置文件,它在 Ubuntu 14 中运行良好:

#/etc/init/data_server.conf
#sudo start data_server
#sudo stop data_server
#sudo status data_server

start on runlevel [2345]
stop on runlevel [016]

chdir /opt/hold/data_server
respawn

post-start script
    echo "data server started at `date +"%F %T"` on `hostname -f`" | mailx -r "abc@host.com" -s "data server Started" "pqr@host.com"
end script

post-stop script
  sleep 30
end script

limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec ./proc_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Run Code Online (Sandbox Code Playgroud)

现在我们正在迁移到 Ubuntu 16,所以我们不能使用upstart,看起来我们需要在systemd这里使用。我必须确保每当系统重新启动或应用程序被终止时,它应该systemd自动启动我的脚本,进而启动我的data server. 所以我想出了下面的systemd脚本:让我知道这是否是我第一次这样做的正确方法?

[Unit]
Description=test server
After=network.target
StartLimitIntervalSec=0

[Service]
User=goldy
Group=goldy
Type=simple
WorkingDirectory=/opt/hold/data_server
ExecStart=/opt/hold/data_server/proc_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Restart=always
RestartSec=3
LimitNOFILE=100000
LimitCORE=infinity

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

每当我运行上面的脚本时,它都会给我这个错误,我不确定出了什么问题?

[/lib/systemd/system/queue_server_two.service:3] Unknown lvalue 'StartLimitIntervalSec' in section 'Unit'
Run Code Online (Sandbox Code Playgroud)

Mar*_*erg 19

您可能会比较systemd您在线阅读的不同版本的文档,而不是使用系统上与您的版本匹配的文档。

检查man systemd.unit您自己的系统。您可能会发现在您的版本中,该指令名为

StartLimitInterval=并且应该使用[Service],而不是[Unit]

我通过搜索systemd StartLimitIntervalSec找到了答案。

  • @jamshid `man systemd.directives` 会告诉您任何指令的文档位置。` StartLimitIntervalSec=` 进入 `Unit`。上面的问题是关于`StartLimitInterval=`。通过使用您的本地手册页,您可以确定您正在检查您实际运行的版本的文档。 (3认同)