我在 Linux 中开发了一个守护进程。它工作正常,但是,当我将该脚本设置为在启动时启动时,它会与其他服务发生冲突,因此我需要在所有服务启动后再启动它。
如何在 init.d shell 脚本或服务本身内部添加延迟而不影响系统启动?
这是 Debian Linux。
问候 Jaime
答案1
一个可能的选择是将这样的一段代码包含在你的 init.d 脚本中。
当然你需要改变测试部分lsmod | grep -qw module_name
来验证硬件模块是否完全初始化。
还要调整守护进程的启动,取决于它是否正在对自身进行守护。
确保第一个 init 脚本/etc/rcX.d/S98first_daemon
在你自制的守护进程启动脚本之前启动/etc/rcX.d/S99homemade_daemon
#!/bin/bash
wait_period=0
sleep_period=5
max_wait_period=30
function is_other_daemon_fully_initialized()
{
lsmod | grep -qw module_name && return 0
return 1
}
while true
do
echo "Time Now: `date +%H:%M:%S`"
echo "Sleeping for $sleep_period seconds"
wait_period=$(($wait_period+$sleep_period))
if [ $wait_period -gt $max_wait_period ];then
echo "Max wait period exceeded, abort."
exit 1
else
sleep $sleep_period
is_other_daemon_fully_initialized && break
fi
done
echo "Initialisation done in $wait_period seconds, launching second daemon."
/path/to/your/homemade/daemon