我无法在 ubuntu-16.04 和 systemd 上获得正确的启动项

Jon*_*sco 1 ubuntu systemd

我需要制作一个新映像并选择了新的 16.04 ubuntu,这样我就可以获得某些软件包的更新版本,而不是从源代码安装。到目前为止,我对这个决定感到遗憾,因为在线文档很少。

在 12.04 和 14.04 中,我经常能够通过安装一个包,然后删除(而不是清除)它来创建 ubuntu 启动脚本,从而将启动脚本重新用于自定义编译。然后我可以编辑它们以指向正确的配置文件和二进制文件。

例如,要使用最新的 openresty,我可以这样做:

apt-get install nginx
apt-get remove nginx
Run Code Online (Sandbox Code Playgroud)

然后我可以更新/etc/init.d/nginx脚本以指向我的自定义二进制/配置文件,我有一个快乐的 ubuntu 启动脚本。伟大的!

此方法不再适用于 16.04。

我已经编辑:

  • /etc/init.d/nginx
  • /etc/init/nginx.conf
  • /lib/system.d/system/nginx.service

ubuntu 从不拉我的二进制文件(在 中/usr/local/openresty/nginx/sbin/nginx)。它总是/sbin/nginx在启动时运行(我一开始错过了卸载“nginx-core”)或什么都不运行。这同样适用于其他包。

Ubuntu 关于从新贵过渡的文档在这方面缺乏,他们关注“开始停止”。

不知道ubuntu 在哪里决定这个。我找不到任何指向/sbin/nginx. 没有日志帮助。我遇到的每个潜在文件都指向备用二进制文件和配置。

如果有人可以分享有关使用新启动系统及其外观/存储信息的良好资源,我将不胜感激。

似乎涉及到一个数据库,因为它检测到文件更改并要求我重新加载 - 但我还没有找到它。

更新

在玩弄了很多之后,我想出了以下内容:

nginx 包似乎安装了两种类型的设置,但只使用了一种。一些问题与此有关。

  1. /etc/init.d/nginx/etc/init/nginx.conf
  2. /lib/systemd/system/nginx.service/etc/systemd/system/nginx.service

从试验和错误中: * 运行systemctl disable nginx.service以禁用/删除大多数链接和文件 * 删除 /etc/systemd/system/nginx.service 中的文件(如果存在) * 在 /lib/systemd/system/nginx.service 中放置一个新文件 * 运行systemctl enable nginx.service

/lib/systemd/system/nginx.service 中的文件必须是文件;它不能是符号链接(否则会出现太多符号链接错误)

这似乎暂时有效。我希望我可以使用符号链接,因为这些文件与版本控制相关。

小智 5

您能否为您的自定义安装创建一个新服务,然后让它自动启动?

[Unit]
Description=Jonathan Vanasco nginx

[Service]
ExecStart=STARTUP COMMAND YOU WANT FOR CUSTOM

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

然后检查它开始:

systemctl start NAMEOFCUSTOM.service
Run Code Online (Sandbox Code Playgroud)

然后设置为开机自启动:

systemctl enable NAMEOFCUSTOM.service
Run Code Online (Sandbox Code Playgroud)