我已经在我们的 Debian squeeze 上从框架中创建了自己的守护进程,我的应用程序从这里启动(+我在那里向我的日志文件添加了一些日志记录)。我已将此文件放入 /etc/init.d/
cp /home/ja /etc/init.d/ucloud-test -f
chown root /etc/init.d/ucloud-test
chmod 775 /etc/init.d/ucloud-test
之后我创建了指向该守护进程的符号链接:
ln -sf ../init.d/ucloud-test /etc/rc0.d/K02ucloud-test
ln -sf ../init.d/ucloud-test /etc/rc1.d/K02ucloud-test
ln -sf ../init.d/ucloud-test /etc/rc6.d/K02ucloud-test
ln -sf ../init.d/ucloud-test /etc/rc2.d/S17ucloud-test
ln -sf ../init.d/ucloud-test /etc/rc3.d/S17ucloud-test
ln -sf ../init.d/ucloud-test /etc/rc4.d/S17ucloud-test
ln -sf ../init.d/ucloud-test /etc/rc5.d/S17ucloud-test
它创建了这个符号链接:
root@id135728-2:/home/ja# cd /etc
root@id135728-2:/etc# ls -l rc* | grep ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 K02ucloud-test -> ../init.d/ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 K02ucloud-test -> ../init.d/ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 S17ucloud-test -> ../init.d/ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 S17ucloud-test -> ../init.d/ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 S17ucloud-test -> ../init.d/ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 S17ucloud-test -> ../init.d/ucloud-test
lrwxrwxrwx 1 root root 21 Aug 7 13:15 K02ucloud-test -> ../init.d/ucloud-test
如果我尝试读取其中一些符号链接,它会显示来自我的守护进程的代码(它应该是正确的)。
root@id135728-2:/etc# cat rc0.d/K02ucloud-test
重启后,我的守护进程似乎没有执行(应用程序不工作,日志文件中没有任何内容)。但如果我自己执行该守护进程,应用程序就会工作,并记录在我的日志中。
/etc/init.d/ucloud-test start
有人知道问题出在哪里吗?谢谢,Roman
答案1
如果不进行进一步的调试(这意味着需要从脚本本身进行大量日志记录以找出不符合预期的内容),很难说出到底发生了什么,但在 Squeeze 上解决此类问题的一个非常好的切入点是关于初始化脚本注释约定的文档这有助于管理依赖关系。因为 99% 的情况下,如果您的 init 脚本在启动后“正常工作”,那么这就是依赖关系问题。
您使用什么进行日志记录,它需要启动吗?网络怎么样?也许它需要连接到数据库?那么您的启动脚本肯定会在稍后运行。
不要手动创建链接,请尝试在初始化脚本的顶部附近添加以下内容:
### BEGIN INIT INFO
# Provides: ucloud-test
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Description: Test script that needs to run after boot
### END INIT INFO
然后,运行insserv ucloud
(注意,我消除了运行级别 1 和 6)
现在,如果事实证明您只需要启动网络(这包括环回设备和网桥!!!)(我怀疑是这种情况),那么您可以更改$all
为$network
,但对于高级网络设置来说,这可能很棘手。如果是这种情况,您可能应该检查更精细的启动挂钩(systemd / systemctl
)。
要做的另一件事是/etc/ucloud-test/ucloud-defaults
在初始化信息之后将其制作并包含在您的脚本中,而不是依赖其他东西将它们放入环境中,但我强烈怀疑您只需要等到启动过程的后期才开始。
无论如何,这应该能给你一个基础来弄清楚。关键是,除非你有非常这样做的具体原因是不希望系统实用程序管理这一点会带来一些特定行为。