在Ubuntu中调试/etc/init.d启动脚本

有定制的dropr消息队列轮询我试图通过/etc/init.d在Ubuntu中启动。 所有3个脚本都非常简单,通过命令行可以完美工作,但出于某种原因,只有其中一个脚本在服务器引导时起作用。 所有有775烫发,并且这工作伟大:

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

以下是一个示例脚本(必须以www数据用户身份运行):

[/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 /添加去除壳脚本-的ubuntu-810 /

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

非常愿意至少对这种失败原因有所了解。 任何人都知道我可以参考哪些日志文件,看看出了什么问题,为什么?


尝试在模拟启动时环境时调用init-script:

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

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


我发现在我的/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

在带有-x的子shell中运行它。

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

链接地址: http://www.djcxy.com/p/75487.html

上一篇: debugging /etc/init.d startup scripts in Ubuntu

下一篇: Best init script for running an application as a separate user