我最近将我的服务器从UbuntuV14.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发布于 2018-03-08 22:51:58
/lib/systemd/systemd-sysv-install是一个钩子,其任务是执行systemd-sysv-generator和其他服务管理系统将识别的非本地启用/禁用操作。Ubuntu的/lib/systemd/systemd-sysv-install只是简单地调用Ubuntu的/usr/sbin/update-rc.d。这反过来又叫/sbin/insserv。这反过来又会看到/etc/init.d中有一个van脚本,并试图从其中获取LSB头信息。
/sbin/insserv有一个特例,当它发现的van rc脚本实际上是一个指向Upstart的/lib/init/upstart-job程序的符号链接时,它就会识别它。因为这是一个通用程序,可以填充很多van rc脚本,所以它不会有适合特定服务的LSB头信息。因此,/sbin/insserv试图使用lsb-header子命令调用rc脚本,实际上是/lib/init/upstart-job,以使其计算并打印服务的正确LSB头。
但是/lib/init/upstart-job实际上不支持这个子命令。这些软件从来没有正确地集成过。/lib/init/upstart-job运行initctl,它试图连接到运行中的Upstart服务管理器,当然会失败(因为其中一个没有运行),并打印您看到的关于无法连接到套接字/com/ubuntu/upstart的第一个错误,然后打印您看到的关于lsb-header子命令不受“Upstart作业”支持的第二个错误(尽管这就是它的目的)。
结果是这一切都出了问题。
它已经出了问题好几年了。人们可以找到报告这个bug的人,当然,当人们直接或间接地在Upstart和van Smoorenburg init下运行D21时,这种情况就发生了,这一点可以追溯到十多年前。2016年年,它在AskUbuntu上被问及。是几个Launchpad的bug,比如2016年这个从年开始。
有趣的是,在2010年的一个Launchpad bug中,有人试图提供补丁以便upstart-job会明白lsb-header子命令和insserv至少提供了一些可以使用的东西,即使它相当缺乏信息。除了一些无法自行修复软件的用户之外,没有人注意到。
当然,这些van rc脚本是Upstart的包装器,目的是为了软件和那些不知道如何使用initctl直接驱动Upstart,但知道如何驱动旧的van rc脚本的人。但是,您使用的是Ubuntu 16;一个systemd操作系统。systemd的向后兼容性机制采用了一些van rc脚本,这些脚本本身就是其他的向后兼容机制,将它们封装在systemd本机单元中,最后试图将发送给systemd服务管理器的命令反映到没有的Upstart服务管理器中。
这太可笑了。
/etc/init.d中找到指向/lib/init/upstart-job的符号链接。从表面上看,它是/etc/init.d/screen-cleanup。锦上添花的是,transmission-daemon由Ubuntu 16上的原生systemd服务单元(/lib/systemd/system/transmission-daemon.service)控制,而van rc向后兼容机制和/lib/systemd/systemd-sysv-install最初并不适用于它。
insserv。Debian 7手册页。https://unix.stackexchange.com/questions/429032
复制相似问题