我想定义一个简单的服务,在 Ubuntu 服务器 16.10 上启动。所以我创建了一个/etc/init.d/mydaemon
我不知怎么搞错了 upstart 和 systemd:一开始我以为我必须设置一个 upstart 服务。因此,在将我的文件转换为 upstart 语法后,我运行了update-rc.d mydaemon defaults
。
我找出了我的错误并运行update-rc.d mydaemon remove
,转换为 systemd 语法,然后运行systemctl enable mydaemon
,但出现错误:
mydaemon.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mydaemon
update-rc.d: error: mydaemonDefault-Start contains no runlevels, aborting.
答案1
我在将 sysv 脚本从 redhat box 移植到 ubuntu 时遇到了同样的错误。我需要在脚本中添加一些标头
### BEGIN INIT INFO
# Provides: my-service-name
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: your description here
### END INIT INFO
在发现https://askubuntu.com/questions/909523/default-start-contains-no-runlevels-aborting
答案2
问题在于该文件的位置,在 Ubuntu 服务器上/etc/systemd/system
,它期望该/etc/init.d/
文件位于遗留文件中。
答案3
只是为了补充@CharlesB 的答案 - 当我进入这种状态时,我可以简单地将文件从移动/etc/init.d/
到/etc/systemd/system/
并重新运行命令并且它正常工作:
sudo mv /etc/init.d/mydaemon /etc/systemd/system/
sudo systemctl enable mydaemon
答案4
我遇到了同样的错误,我修复了它并输入了默认的启动信息,如下所示:
vi /etc/init.d/greenbone-security-assistant
更改自:
# Default-Start:
到:
# Default-Start: 2 3 4 5
:wq
root@kali:/etc/init.d# systemctl enable greenbone-security-assistant
使用 /lib/systemd/systemd-sysv-install 将 greenbone-security-assistant.service 的状态与 SysV 服务脚本同步。
执行:/lib/systemd/systemd-sysv-install enable greenbone-security-assistant