运行 17.04 (Zesty Zapus) 并尝试启动 upstart 脚本,但我注意到它没有执行。然后我注意到 upstart 甚至没有被列为已安装包,即使 中有很多脚本/etc/init
。显然它们没有运行,因为在 cron 等中引入拼写错误不会影响其启动。
我应该如何运行 upstart 脚本?安装 upstart 还是通过某些 systemd 层运行它?当其他脚本/etc/init
突然运行时,安装 upstart 会破坏某些东西吗?
答案1
显然,尽管有脚本,但 upstart 并不包含在服务器版本 OOTB 中/etc/init
(有点令人困惑)。
我使用以下代码将 upstart 脚本重写为 systemd 单元文件:面向新用户的 Ubuntu wiki 页面中的 systemd作为指南并以正常方式启用它。
答案2
上述步骤非常有效,我在回答中给出了一些详细的步骤:
我的环境如下
- Ubuntu 17.10
- 我在 Gunicorn 19.x 服务器上有一个 python 应用程序,我需要将该应用程序作为服务启动。
首先您需要编写一个 foo.service 文件。
[Unit]
Description=FooServer
[Service]
Restart=on-failure
WorkingDirectory=/path/to/your/working/directory/where the foo lives
ExecStart=/what/process/will call foo eg: in my case I used gunicorn app:app
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
'=' 符号左侧每个单词的含义以及它们在 upstart 中的对应含义(与之前的版本相同)位于链接中https://wiki.ubuntu.com/SystemdForUpstartUsers
文件准备好后,假设您将其命名为“foo.service”(.service 扩展名很重要)
您需要将文件放在/lib/systemd/system
之后你需要通过调用来启用该服务
systemctl enable foo
这将提示您输入 root 密码,因为它将在所有服务参与的某些基于 root 访问的文件夹中创建符号链接。
如果您毫无困难地到达这里,那就太好了。您的服务就此创建。通过调用来启动它
sudo service foo start
systemctl status foo
查看
sudo service foo stop
停止服务的状态
我今天一整天都在 Gunicorn 页面上,尝试了各种选项,但都不起作用,最后这个起作用了。非常感谢 @Zanna 和 @Nicklas Karlsson