使用 systemd 设置守护进程在启动时启动

使用 systemd 设置守护进程在启动时启动

我正在编写一个守护进程来在无头设备上管理我的 Java 应用程序乌班图16.04使用 jsvc 的盒子和这个(可能是 systemd 之前的)教程,并一直运行update-rc.d mydaemon enable,收到错误

update-rc.d: error: mydaemon Default-Start contains no runlevels, aborting

在 Google 上搜索了一下,这似乎与(相当?)最近迁移到 有关systemd,我已经确认它正在与 一起运行pidof systemd

我如何实现与update-rc.d(更重要的是停止服务通过/etc/init.d/mydaemon stop而不是仅仅杀死进程,因为 Java 应用程序需要清理)。是systemd不同update-rc.d的系统,还是systemd只是改变了后者的工作方式?

答案1

我没有 Ubuntu 16.04 来测试这一点,也没有为您提供许多详细信息,但 systemd 有一个兼容性功能,允许旧/etc/init.d脚本继续工作。不要使用来启用守护进程,而是update-rc.d使用等效的 systemd 本机命令:

sudo systemctl enable mydaemon

如果这仍然产生相同的错误,请将缺少的行添加到脚本中的起始注释集中:

# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6

### BEGIN INIT INFO### END INIT INFO行之间,然后重试。请参阅最低有效位核心这些行的描述。您还可以显式启动守护进程

sudo systemctl start mydaemon

并询问其状态

sudo systemctl status -l mydaemon

man systemd-sysv-generator参阅 兼容性功能。看这个维基用于将 System V 或像您这样的新贵脚本转换为本机 systemd 单元。

答案2

您必须有一个 /etc/init.d/tightvncserver 脚本,如下所示:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          tightvncserver
# Should-Start:      
# Required-Start:    $local_fs $remote_fs x11-common
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: VNC server
# Description:       Debian init script for the VNC Server
### END INIT INFO
# /etc/init.d/tightvncserver

# Set the VNCUSER variable to the name of the user to start tightvncserver under
VNCUSER='pi'
case "$1" in
  start)
    su $VNCUSER -c '/usr/bin/tightvncserver :1 -geometry 1280x800 -depth 16'
    echo "Starting TightVNC server for $VNCUSER"
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

然后运行命令:

sudo service tightvncserver start

相关内容