有自定义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等)中寻找输出......仍然没有线索。
非常希望至少能够了解为什么会失败。任何人都知道我可以参考哪些日志文件,看看出了什么问题&为什么呢?
答案 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)
使用-x。
在子shell中运行它http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html
答案 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'"