进一步阅读

进一步阅读

我最近将我的服务器从 Ubuntu V14.04 升级到 V16.04,现在 systemctl 似乎不再工作了。

我需要防止传输守护进程在启动时自动启动,所以我发出命令

sudo systemctl disable transmission-daemon.service

我得到以下回复

Synchronizing state of transmission-daemon.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable transmission-daemon
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
The script you are attempting to invoke has been converted to an Upstart job, but lsb-header is not supported for Upstart jobs.
insserv: warning: script 'screen-cleanup' missing LSB tags and overrides
insserv: Default-Start undefined, assuming empty start runlevel(s) for script `screen-cleanup'
insserv: Default-Stop  undefined, assuming empty stop  runlevel(s) for script `screen-cleanup'
insserv: warning: current start runlevel(s) (empty) of script `transmission-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `transmission-daemon' overrides LSB defaults (0 1 6).
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused

该服务不会被禁用


更新 根据 @JdeBP 删除屏幕清理脚本解决了问题

$ sudo rm /etc/init.d/screen-cleanup
$ sudo systemctl disable transmission-daemon.service

Synchronizing state of transmission-daemon.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable transmission-daemon
insserv: warning: current start runlevel(s) (empty) of script `transmission-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `transmission-daemon' overrides LSB defaults (0 1 6).
insserv: warning: current start runlevel(s) (empty) of script `transmission-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `transmission-daemon' overrides LSB defaults (0 1 6).

我可以看到服务现在残疾人按要求

systemctl status transmission-daemon
● transmission-daemon.service - Transmission BitTorrent Daemon
   Loaded: loaded (/lib/systemd/system/transmission-daemon.service; disabled; ve
  Drop-In: /etc/systemd/system/transmission-daemon.service.d
           └─local.conf
   Active: active (running) since Thu 2018-03-08 08:16:00 EST; 2 days ago
 Main PID: 2423 (transmission-da)
   Status: "Uploading 329.89 KBps, Downloading 11.04 KBps."
   CGroup: /system.slice/transmission-daemon.service
           └─2423 /usr/bin/transmission-daemon -f --log-error -g /etc/transmissi

答案1

/lib/systemd/systemd-sysv-installsystemd-sysv-generator是一个钩子,其工作是执行其他服务管理系统可以识别的非本机启用/禁用操作。 Ubuntu/lib/systemd/systemd-sysv-install简称为 Ubuntu 的/usr/sbin/update-rc.d.反过来又调用/sbin/insserv.反过来,它会发现有一个 van Smoorenbugrc脚本,/etc/init.d并尝试从中获取 LSB 标头信息。

/sbin/insserv有一个特殊情况,它会识别出rc它找到的 van Smoorenburg 脚本实际上是 Upstart 程序的符号链接/lib/init/upstart-job。因为这是一个填充许多 van Smoorenburgrc脚本的通用程序,所以它不会具有适合特定服务的 LSB 标头信息。因此,/sbin/insserv尝试使用子命令调用rc脚本/lib/init/upstart-joblsb-header使其计算并打印出服务的正确 LSB 标头。

/lib/init/upstart-job实际上并不支持该子命令。这些软件从未正确集成。 /lib/init/upstart-jobrunning initctl,它尝试连接到正在运行的 Upstart 服务管理器,当然会失败(因为其中一个没有运行),并打印您看到的有关无法连接到 socket 的第一个错误/com/ubuntu/upstart,然后打印您看到的第二个错误关于lsb-header子命令不被支持“用于新贵工作”(即使这就是它的用途)。

结果就是一切都出错了。

多年来一直出错。人们可以找到报告此错误的人,当然,当人们insserv直接或间接在 Upstart 和 van Smoorenburg 领导下运行时init,当然也发生了这种情况,可以追溯到十多年前。 2016 年,有人在 AskUbuntu 上询问过这个问题。 这是几个 Launchpad 错误,例如这个是2016年的

有趣的是,在其中一个 Launchpad 错误(2010 年的错误之一)中,有人试图提供补丁以便upstart-job理解lsb-header子命令insserv至少给出某物一起工作,即使它的信息相当少。除了一些无法自行修复软件的用户之外,没有人注意到这一点。

当然,这些 van Smoorenburgrc脚本是 Upstart 的包装器,以方便那些不了解如何直接使用 驱动 Upstartinitctl但知道如何驱动旧 van Smoorenburgrc脚本的软件和人员。但是,您使用的是 Ubuntu 16; systemd 操作系统。 systemd 的向后兼容机制采用了一些 van Smoorenburgrc脚本他们自己别的东西的向后兼容机制,将它们包装在 systemd 本机单元中,并最终尝试将发送到 systemd 服务管理器的命令反射到不存在的 Upstart 服务管理器。

这太可笑了。

  1. /etc/init.d找到指向 的符号链接/lib/init/upstart-job。从情况来看确实如此/etc/init.d/screen-cleanup
  2. 去掉它。

锦上添花的是,它由Ubuntu 16 上的本机 systemd 服务单元 ( ) 和 van Smoorenburg向后兼容机制transmission-daemon控制,并且首先不适用于它。/lib/systemd/system/transmission-daemon.servicerc/lib/systemd/systemd-sysv-install

进一步阅读

相关内容