在 Ubuntu 16.04 中创建单元文件

在 Ubuntu 16.04 中创建单元文件

我已经在以下位置创建了这个单元文件/lib/systemd/system/menu-core-prices-update.service

[Unit]
Description = core-price-update daemon
After network.target = auditd.service

[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop =  /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh

[Install]
WantedBy = multi-user.target

从命令行我可以运行:

$ /usr/local/bin/start-menu-core-prices-update.sh

并且程序正常启动。但是如果我启动守护进程:

$ sudo systemctl start menu-core-prices-update.service

我收到此错误:

Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
-- 
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed

权限:

-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh

答案1

问题#1

我发现这个帖子的标题是:[已解决] 将自定义脚本添加到systemd它与上面的输出显示相同的错误,主要是这一点:

在步骤 EXEC 生成 /usr/local/bin/start-menu-core-prices-update.sh 时失败:Exec 格式错误

此错误通常意味着您的脚本存在以下一个或多个问题:

  • 不可执行
  • 缺少 shebang ( #!/bin/bash)

要解决这些问题,请确保您的脚本可执行:

$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh

并且一定要#!/bin/bash在顶部添加一个 shebang。

问题#2

看起来您在这一行有一个拼写错误:

After network.target = auditd.service

这可能应该是这样的:

After=network.target auditd.service

问题 #3

我不清楚你为什么使用Type = forking.当您使用此类型时,您ExecStart=需要使用调用的方法fork()。您还应该使用该PIDFile=选项。

我希望您的 Java 应用程序可以与simple或一起正常工作oneshot。请参阅此 U&L 问答,标题为:在 systemd 脚本中分叉了解更多相关信息。

相关内容