8

有自定义 dropr 消息队列轮询器,我试图通过 ubuntu 中的 /etc/init.d 启动。所有 3 个脚本都是超级简单的一行代码,并且可以通过命令行完美运行,但由于某种原因,只有一个脚本在服务器启动时真正运行。都有 775 次烫发,效果很好:

sudo /etc/init.d/app-poller.sh 

这是一个示例脚本(必须以 www-data 用户身份运行):

[/etc/init.d]$  cat /etc/init.d/app-poller.sh 
#!/bin/sh
su - www-data -c "bash -c '/path/to/dropr-server/daemons/app-poller.php'"

我已经通过以下方式多次运行删除/重新输入 inittab 条目:

updates-rc.d -f app-poller.sh remove
updates-rc.d app-poller.sh defaults

rcconf 脚本还说一切正常。我已按照此处的所有说明进行操作:http: //jonathonhill.net/2009-04-23/auto-start-a-shell-script-on-ubuntu-server/此处和此处:http://stringofthoughts.wordpress .com/2009/04/16/adding-removing-shell-scripts-ubuntu-810/

我已经在所有常见的嫌疑人(/var/log/messages、/var/log/daemons 等)中寻找输出......仍然没有任何线索。

非常想至少对失败的原因有所了解。任何人都知道我可以参考哪些日志文件来查看出了什么问题以及为什么?

4

4 回答 4

7

我发现在 /etc/init.d/scriptname 顶部附近添加以下内容就是我所需要的:

debug_me=true

if [[ $debug_me == true ]]; then

  # Close STDOUT
  exec 1<&-
  # Close STDERR
  exec 2<&-

  LOG_FILE=/home/myhome/scriptname.log

  # Open STDOUT as $LOG_FILE file for read and write.
  exec 1<>$LOG_FILE

  # Redirect STDERR to STDOUT
  exec 2>&1

  # Display shell commands with expanded args
  set -x

fi
于 2016-07-28T17:54:13.060 回答
6

在模拟引导时环境时尝试调用 init-script:

env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" /etc/init.d/your-daemon start 

如果您没有看到该命令的任何输出,请在脚本中添加一些调试输出。

于 2013-07-19T14:39:59.810 回答
2

使用 -x 在子 shell 中运行它。

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

于 2014-10-22T12:47:03.980 回答
0

尝试改变:

su - www-data -c "bash -c '/path/to/dropr-server/daemons/app-poller.php'"

到:

/bin/su - www-data -c "/bin/bash -c '/path/to/dropr-server/daemons/app-poller.php'"

于 2011-11-01T16:42:26.467 回答