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

时间:2011-11-01 15:55:53

标签: shell ubuntu init autostart

有自定义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 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

答案 3 :(得分: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'"