守护程序脚本无法启动(适用于Google App Engine)

时间:2016-01-12 21:23:52

标签: bash google-app-engine centos daemon init.d

我正在尝试守护脚本。我按照了几个教程并提出了以下脚本(之前从未完成过,只是填写了一个模板,不确定345 70 30是什么意思):

#!/bin/bash

# parserservices    Parser Services
#
# chkconfig: 345 70 30
# description: Parser Services
# processname: parserservices

# chkconfig --add parserservices

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

prog='ParserServices for CENTOS/UNIX'

start() {
   # Check that networking is up.
   [ "$NETWORKING" = "no" ] && exit 1

        echo -n $"Starting $prog: "
   daemon --check parserservices nohup /home/centos/parserservices/start_dev_server_centos.sh &
   RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/parserservices
   return $RETVAL
}

stop() {
        echo -n $"Shutting down $prog: "
   killproc java
   RETVAL=$?
   echo
   [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/parserservices
   return $RETVAL
}

# See how we were called.
case "$1" in
  start)
   start
        ;;
  stop)
   stop
        ;;
  status)
   status parserservices
   RETVAL=$?
   ;;
  restart|reload)
   stop
   start
   RETVAL=$?
   ;;
  *)
        echo $"Usage: $0 {start|stop|restart|status}"
        RETVAL=3
esac

exit $RETVAL

这只是一个测试,并且不会再运行任何java进程,因此杀死java应该不是问题(除非有人可以提供更好的替代方案,这是为了运行另一个执行一些初始化的脚本)使用Google App Engine开发服务器启动java。

我将其复制到/etc/rc.d/init.d/parserservices并初始化并启动,如下所示:

$ sudo chmod 755 /etc/rc.d/init.d/parserservices
$ sudo chkconfig --add parserservices
$ sudo systemctl daemon-reload    
$ sudo service parserservices start
Starting parserservices (via systemctl):                   [  OK  ]

但没有任何事情开始。当我自己运行脚本时,它运行良好:

sudo nohup /home/centos/parserservices/start_dev_server_centos.sh &
root     21510  0.0  0.0 189372  2680 pts/1    S    21:18   0:00 sudo nohup /home/centos/parserservices/start_dev_server_centos.sh
root     21511  0.0  0.0 113116  1184 pts/1    S    21:18   0:00 /bin/bash /home/centos/parserservices/start_dev_server_centos.sh
root     21512 27.0  0.2 6619624 37596 pts/1   Sl   21:18   0:00 java -ea -cp /home/centos/gae/appengine-java-sdk-1.9.27/lib/appengine-tools-api.jar com.google.appengine.tools.KickStart com.google.appengine.tools.development.DevAppServ
root     21560  166  0.5 11041848 89188 pts/1  Sl   21:18   0:01 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java -Xmx8184m -javaagent:/home/centos/gae/appengine-java-sdk-1.9.27/lib/agent/appengine-agent.jar -Xboo
centos   21578  0.0  0.0 123356  1384 pts/1    R+   21:18   0:00 ps au

顺便说一句,脚本的权限:

-rwxrwxr-x.  1 centos centos  155 Jan 12 20:06 start_dev_server_centos.sh

这是systemctl status parserservices

的输出
$ sudo systemctl status parserservices
parserservices.service - SYSV: Parser Services
   Loaded: loaded (/etc/rc.d/init.d/parserservices)
   Active: active (exited) since Tue 2016-01-12 21:05:06 UTC; 18h ago

Jan 12 21:05:06 curator.novalocal parserservices[21266]: Starting ParserServices for CENTOS/UNIX:
Jan 12 21:05:06 curator.novalocal parserservices[21266]: /etc/rc.d/init.d/parserservices: Usage: daemon [+/-nicelevel] {program}
Jan 12 21:05:06 curator.novalocal systemd[1]: Started SYSV: Parser Services.
Jan 12 21:10:13 curator.novalocal systemd[1]: Started SYSV: Parser Services.

3 个答案:

答案 0 :(得分:2)

在CentOS 7中有更优雅的方式来创建守护进程。

我看到你正在混合使用经典(SysV)和新的(systemd)方法来执行和管理守护进程。经典的方法是在/etc/init.d/中创建脚本,但是我看到你使用的是systemctl,它是systemd的一部分。我建议以systemd方式创建守护进程。

从/etc/init.d中删除脚本,并在/ etc / systemd / system目录中创建parserservices.service文件,如下所示:

[Unit]
Description=Parser Services
After=syslog.target

[Service]
ExecStart=/path/to/your/script/start_dev_server_centos.sh

[Install]
WantedBy=multi-user.target

开头
systemctl start parserservices

使用

检查其状态
systemctl status parserservices

如果您希望它在系统启动时启动,请使用

启用它
systemctl enable parserservices

每次更改.service文件时执行systemctl daemon-reload

阅读有关systemd here

中守护进程的更多信息

答案 1 :(得分:1)

根据消息,您的daemon命令似乎不正确:

  

/etc/rc.d/init.d/parserservices:用法:守护进程[+/- nicelevel]   {方案}

尝试修改(like suggested here

daemon --check parserservices nohup /home/centos/parserservices/start_dev_server_centos.sh &

nohup /home/centos/parserservices/start_dev_server_centos.sh &

如果您想使用daemon,请尝试使用双引号:

daemon --check parserservices "nohup /home/centos/parserservices/start_dev_server_centos.sh &"

这会将&的效果从nohup移到daemon

如果您的daemon不支持--check,请将其删除。 如何检查?

grep -e '--check=' /etc/init.d/functions
  

<强> - ?检查= *)

->支持。

答案 2 :(得分:-1)

您可以使用sudo service parserservices start选项调试脚本,以找出未按预期启动过程的原因。

不要拨打sudo bash -x /etc/rc.d/init.d/parserservices start,而是尝试tapply查看正在发生的事情以及失败的地方。