启动自制服务时提示“启动SYSV失败”

启动自制服务时提示“启动SYSV失败”

我正在尝试在 root 上设置一个服务,该服务将在系统启动后自动启动 monetdb 数据库,因为 monetdb 不提供这种机制。我创建了/etc/init.d/monetdb脚本文件:

#!/bin/sh
#
# /etc/init.d/monetdb
# Subsystem file for "MonetDB" starter
#
# chkconfig: 2345 95 05
#
# processname: MonetDB
# pidfile: /var/run/MonetDB.pid

. /etc/init.d/functions

case "$1" in
start)
        su - monetka -c ". start.sh"

        touch /var/lock/subsys/monetdb
        ;;
stop)
        su - monetka -c ". stop.sh"

        rm -f /var/lock/subsys/monetdb
        ;;
status)
        status monetdb
        ;;
restart|reload|condrestart)
        /etc/init.d/monetdb stop
        /etc/init.d/monetdb start
        ;;
*)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
esac
exit 2

我使用自制脚本start.shstop.sh位于monetka用户上的脚本,每次执行都很好。但当我想启动我的服务时,我收到错误和以下信息:

monetdb.service - SYSV: MonetDB starter
   Loaded: loaded (/etc/rc.d/init.d/monetdb)
   Active: failed (Result: exit-code) since śro 2015-04-29 14:36:30 CEST; 16min ago
  Process: 5390 ExecStart=/etc/rc.d/init.d/monetdb start (code=exited, status=2)

kwi 29 14:36:30 yamny.centOS systemd[1]: Starting SYSV: MonetDB starter...
kwi 29 14:36:30 yamny.centOS su[5391]: (to monetka) root on none
kwi 29 14:36:30 yamny.centOS monetdb[5390]: [śro, 29 kwi 2015, 14:36:30 CEST] MonetDB: dbfarm jest już ur...miona
kwi 29 14:36:30 yamny.centOS monetdb[5390]: [śro, 29 kwi 2015, 14:36:30 CEST] MonetDB: baza demo jest już...miona
kwi 29 14:36:30 yamny.centOS systemd[1]: monetdb.service: control process exited, code=exited status=2
kwi 29 14:36:30 yamny.centOS systemd[1]: Failed to start SYSV: MonetDB starter.
kwi 29 14:36:30 yamny.centOS systemd[1]: Unit monetdb.service entered failed state.

此外,根据上面的报告,start.sh脚本运行良好(正如我之前所说)。

我目前所做的:

  1. /etc/init.d/monetdb在 root 上创建脚本
  2. 新增服务chkconfig --add monetdb
  3. 使用以下命令启动服务systemctl start monetdb.service

答案1

/etc/init.d/monetdb好的,我从脚本中删除一些行后解决了该问题

#!/bin/sh
#
# /etc/init.d/monetdb
#
# chkconfig: 2345 95 05
# description: MonetDB starter
#
case "$1" in
start)
        su - monetka -c ". start.sh"
        ;;
stop)
        su - monetka -c ". stop.sh"
        ;;
restart)
        /etc/init.d/monetdb stop
        /etc/init.d/monetdb start
        ;;
esac

然后添加服务chkconfig --add monetdb,并且systemctl start/stop monetdb运行良好......

答案2

“/etc/init.d/functions”可能不存在,这会导致原始脚本失败。

鉴于 Ramhound 的评论,我意识到我本来可以更清楚地回答这个问题。我遇到了完全相同的问题,在我的例子中,脚本失败是因为文件 /etc/init.d/functions 不存在。(在我的 CentOS 6.7 上,它位于 /etc/rc.d/init.d/functions)。鉴于 Yammy 通过从他的原始脚本(其中包括有问题的 /etc/init.d/functions 引用)中“删除一些行”自行解决了他的问题,我认为更具体的答案可能会对其他人有所帮助。

话虽如此,脚本可能还存在其他问题,这就是为什么我将答案表述为“有可能......”

我很惊讶 Ramhound 发现我的回复没有提供答案,需要提问者澄清。也许 Ramhound 可以提供更多说明,说明我认为我的答案需要原始发帖者澄清的地方。好奇的人想知道。

相关内容