Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Daemonized脚本无法启动(适用于Google App Engine)_Bash_Google App Engine_Centos_Daemon_Init.d - Fatal编程技术网

Bash Daemonized脚本无法启动(适用于Google App Engine)

Bash Daemonized脚本无法启动(适用于Google App Engine),bash,google-app-engine,centos,daemon,init.d,Bash,Google App Engine,Centos,Daemon,Init.d,我正在尝试对脚本进行后台监控。我根据几篇教程编写了以下脚本(以前从未编写过,只是填写了一个模板,不知道345 70 30是什么意思): 这只是一个测试,不会有更多的java进程在运行,因此杀死java不应该是一个问题(除非有人能提供更好的替代方案,否则这是为了运行另一个脚本,执行一些初始化,并使用Google App Engine开发服务器启动java) 我将其复制到/etc/rc.d/init.d/parserservices,并进行初始化和启动,如下所示: $ sudo chmod 755

我正在尝试对脚本进行后台监控。我根据几篇教程编写了以下脚本(以前从未编写过,只是填写了一个模板,不知道345 70 30是什么意思):

这只是一个测试,不会有更多的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.

根据消息,您的
守护进程
命令似乎不正确:

/etc/rc.d/init.d/parserservices:use:daemon[+/-nicelevel] {程序}

尝试修改()

如果要使用
守护进程
,请尝试使用双引号:

daemon --check parserservices "nohup /home/centos/parserservices/start_dev_server_centos.sh &"
这将把
&
的效果从
守护进程移动到
nohup

如果您的
守护进程
不支持
——请检查
,将其删除。 如何检查

grep -e '--check=' /etc/init.d/functions
--检查=?*)


->
支持。

您可以使用
-x
选项调试脚本,以找出脚本未按预期启动进程的原因


不要调用
sudo服务parserservices start
,而是尝试
sudo bash-x/etc/rc.d/init.d/parserservices start
,查看发生了什么以及在哪里失败。

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

我看到您正在混合使用经典(SysV)和新(systemd)方法来执行和管理守护进程。经典的方法是像您那样在/etc/init.d/中创建脚本,但我看到您使用的是systemctl,它是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中守护进程的更多信息

当我运行
sudo service parserservices start
时,是否有任何方法可以调试正在发生的事情?我在任何地方都找不到任何日志。我应该尝试获取supervisord吗?
systemctl status parserservices
显示了什么?@stee1rat我将输出添加到systemctl命令中。我不确定应用引擎是否有不同的
守护程序
,但Ubuntu的
守护程序
没有
--检查
选项(请参阅手册:). 我能问一下你为什么要做这些而不是创建一个systemd单元文件吗?我在Ubuntu上工作过(它没有
chkconfig/systemctl/daemon/functions/sysconfig
,我没有使用相应的行)谢谢,我想保留
--check
参数,它应该根据文档和这个问题的公认答案工作:您是否检查了/etc/init.d/函数?它应该有
--check=?*)
try
grep-e'--check='/etc/init.d/function
。如果是,请尝试“我的答案”中的最后一个命令(已更新)。这不会提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-使用
-x
调试脚本应该会揭示问题,并使解决问题成为可能,甚至是微不足道的。这仍然不能成为答案。这是一个提示,是的,但不是一个答案。我更喜欢告诉人们如何学习如何克服这个问题,而不是给他们一个答案,两天后他们会遇到下一个问题,不得不再次提问。作为一个评论更好。
systemctl start parserservices
systemctl status parserservices
systemctl enable parserservices