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

rIC*_*ICh 5 shell ubuntu init autostart

有我要通过ubuntu中的/etc/init.d启动的自定义dropr消息队列轮询器。所有这三个脚本都是非常简单的一个衬板,并且可以通过命令行完美运行,但是由于某些原因,当服务器启动时,只有其中一个实际上可以运行。所有人都有775个烫发,而且效果很好:

sudo /etc/init.d/app-poller.sh 
Run Code Online (Sandbox Code Playgroud)

这是一个示例脚本(必须以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'"
Run Code Online (Sandbox Code Playgroud)

我通过以下方式多次运行了删除/重新输入inittab条目的操作:

updates-rc.d -f app-poller.sh remove
updates-rc.d app-poller.sh defaults
Run Code Online (Sandbox Code Playgroud)

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等)中的输出...仍然没有任何线索。

非常想至少了解一下为什么会失败。任何人都知道我可以参考哪些日志文件以查看出了什么问题以及为什么?

Chr*_*lin 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
Run Code Online (Sandbox Code Playgroud)


小智 5

在模拟启动时环境时,尝试调用init脚本:

env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" /etc/init.d/your-daemon start 
Run Code Online (Sandbox Code Playgroud)

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