写入守护进程,/etc/rc.d/init.d/functions 挂起

写入守护进程,/etc/rc.d/init.d/functions 挂起

我正在为 Fedora 23 编写自己的服务守护进程,当我的脚本在包含源函数库时挂起时,我陷入了困境。

#!/bin/sh
#
# service-live-text-relation <summary>
#
# chkconfig:   2345 80 20
# description: Starts and stops a single service-live-text-relation instance on this system
#

### BEGIN INIT INFO
# Provides: service-live-text-relation
# Required-Start: $network $named
# Required-Stop: $network $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: This service manages the service-live-text-relation daemon
# Description: service-live-text-relation
### END INIT INFO

#
# init.d / servicectl compatibility (openSUSE)
#
if [ -f /etc/rc.status ]; then
    . /etc/rc.status
    rc_reset
fi

echo "test1"

#
# Source function library.
#
if [ -f /etc/rc.d/init.d/functions ]; then
    . /etc/rc.d/init.d/functions
fi

#. /etc/init.d/functions

echo "test2";

#... further code goes here ...

我运行以下命令:

/bin/systemctl daemon-reload
chkconfig --add service-live-text-relation
chkconfig service-live-text-relation on
/bin/systemctl enable service-live-text-relation.service

当我跑步时:

service service-live-text-relation start

我给出以下输出:

test1
Starting service-live-text-relation (via systemctl):

并且脚本挂起...

我按照示例观看了另一个脚本,但我无法识别我的脚本中可能存在哪些错误。

答案1

我相信您正在被 systemd 兼容性所困扰。在启用 systemd 的系统中, /etc/init.d 中的文件由 systemd 处理。 “service”命令只是一个 shell 脚本,它尝试以“可爱”(有帮助)的方式为您启动服务。您是否尝试过手动运行“/etc/init.d/service-live-text-relation”?

我不知道 systemd 兼容性是如何工作的,所以我无法帮助你。如果您有正确的“启动”、“停止”、“重新启动”(等)目标,就像其他 init.d 服务控制脚本一样,那么我相信您可以使它们工作。

但是你真的应该创建一个 systemd 单元文件。也许尝试在 /etc/systemd/user 中添加一个名为“service-live-text-relation.service”的单元文件。查看“man systemd.service”(及其所有朋友)。它正在成为一个 systemd 世界,因此您不妨更新您的启动文件。恕我直言。

相关内容