我有一个新贵的脚本,将启动一个自定义docker服务器。 当我做sudo start [myservice]没有任何反应。 随后, sudo status [myservice]显示为: [myservice] start/killed, process 3586 。
这是/etc/init/[myservice].conf中的脚本:
description "[description]" author "[my name and email]" start on runlevel [2345] stop on runlevel [016] respawn expect fork script sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1 end-script
这里是grafserv-start.sh :
#!/bin/bash /usr/bin/java -Djetty.port=3070 -jar /path/to/grafserv/trunk/start.jar echo "Done starting GrafServ"
我已经尝试将脚本命令的输出redirect到tmp日志文件,但该文件从不创build。 当我开始时,我只是得到一个挂起,直到我^ C。 另外,我试着用strace来运行它,但是这给了我很多关于socket的东西。
sudo -u www-data
如果提示input密码,将会挂起。 你有没有检查,用户的“启动脚本”运行sudoers权限来做到这一点?
我认为有三个可能的问题:
你的expect fork是错误的,因为你的程序实际上没有分叉。 这可能不是这样,因为你正在使用一个脚本,但你可能想尝试expect daemon或根本不期望。
你的java程序实际上并没有进入守护进程模式,因此需要放在后台。 换句话说,你需要一个&最后: sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1 &
你的暴发户状况不佳。 我不知道到底发生了什么,但是即使你编辑脚本是正确的,它仍然会挂起。 如果发生这种情况,请重命名该文件(例如/etc/init/[myservice]-1.conf并尝试启动直到停止挂载。一旦获得脚本,将该文件重命名为正确的名称并重新启动系统。
我想你错过了贵族剧本面前的高pipe……我认为这是必要的。 尝试这个:
exec sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
就像Bittrance说的,你可能也想确保你的java程序在后台运行。 如果您的Java程序中没有任何将其作为后台进程或守护进程运行的逻辑,请尝试在脚本的末尾附加“ &或“something”。