OK,我知道这是一个很古老的话题,请在您鄙视之前给我一个描述问题的机会。我google+百度N久,都没有找到我所碰到的问题的答案,实在搞不懂错在哪里
【要实现的目标】一个开机自动启动并后台运行的程序,该程序每隔几秒钟想某个日志里打印一句话。
【我遇到的问题】开机该程序不能自动启动。但在控制终端上可以手动启动,启动之后能正常运行。
【我的实现】(1)该程序如下:
int main(void)
{
int i = 0;
my_print("enter main!\n");
daemonize();
while(1)
{
my_print("%04d: test\n",i);
i++;
sleep(5);
}
}
其中my_print是自己写的一个写日志函数,原型:int my_print(const char *fmt,...); 该函数将输入的打印信息写到/home/test/info.log 该函数确定正确,并且函数中没有调用过exit。
daemonize函数抄写的APUE上的(但不包括最后可选的syslog部分),确定正确。
程序编译生成的可执行文件名为:dmtest
(2)自己写了一个安装脚本和一个启动脚本
启动脚本(名字为dmboot)内容如下:
#!bin/bash
test -x `which dmtest` || exit 1
killall dmtest> /dev/null 2>&1
dmtest
echo "dmboot start" > /home/test/dmboot.txt
exit 0
安装脚本内容如下:
#!bin/bash
cp -f ./dmtest /usr/bin/
cp -f ./dmboot /etc/init.d
rm -f /etc/rc2.d/S99dmboot
rm -f /etc/rc3.d/S99dmboot
rm -f /etc/rc4.d/S99dmboot
rm -f /etc/rc5.d/S99dmboot
ln -s /etc/init.d/dmboot /etc/rc2.d/S99dmboot>/dev/null 2>&1
ln -s /etc/init.d/dmboot /etc/rc3.d/S99dmboot>/dev/null 2>&1
ln -s /etc/init.d/dmboot /etc/rc4.d/S99dmboot>/dev/null 2>&1
ln -s /etc/init.d/dmboot /etc/rc5.d/S99dmboot>/dev/null 2>&1
【环境描述】
(1)操作系统ubuntu 11.04 内核:2.6.38
(2)/usr/bin/dmtest的属性:-rwxr-xr-x 1 root root ...
/etc/rcX.d/S99dmboot的属性:lrwxrwxrwx 1 root root ... (其中的rcX.d中的X代表2,3,4,5)
/etc/init.d/dmboot的属性:-rwxr-xr-x 1 root root ...
【现状】我开机后,/home/test/dmboot.txt该文件中有dmboot start字符串,说明dmboot是被运行过的,并且dmboot中的dmtest程序也是被运行过的。
但是/home/test/info.log中没有任何信息,感觉好像dmtest程序从来没有运行过一样。
并且ps aux | grep dmtest之后也看不到dmtest程序中运行。
我实在想不出哪个地方出错了,请大家指点一下。