当前位置: 技术问答>linux和unix
请教一下究竟是什么原因导致在服务状态daemon下无法调用外界脚本呢?(附测试代码)
来源: 互联网 发布时间:2015-03-13
本文导语: 测试代码在 http://boyzxd.myrice.com/daemonhelp.zip 准备: 请建立工作目录 /work/test 然后将这些文件复制进去。 因为脚本sdlk中有写具体的路径名的,如果设置不正确则无法启动服务。 先执行make clean以初始化环境 在执行mak...
测试代码在 http://boyzxd.myrice.com/daemonhelp.zip
准备:
请建立工作目录
/work/test
然后将这些文件复制进去。
因为脚本sdlk中有写具体的路径名的,如果设置不正确则无法启动服务。
先执行make clean以初始化环境
在执行make后,生成srv_test和trigger后,就可以做测试了
文件介绍:
srv_test.c是测试的源代码
trigger.c是测试客户端源代码
sdlk是控制脚本
makefile是编译文件
srv_test是生成的可执行
trigger是用于发送测试数据包,触发服务端动作
1.
以应用程序方式启动:
[root@tsam test]# srv_test& 注释:不带参数时,应以普通应用程序启动
[1] 13585
program started
[root@tsam test]# trigger 注释:发送测试包
recv data package
trigger data sent
[root@tsam test]# Shutting down SMB services: OK ] 注释:srv_test成功调用到samba控制脚本重启samba
Shutting down NMB services: OK ]
Starting SMB services: OK ]
Starting NMB services: OK ]
smb should be restarted
[root@tsam test]# ps 注释:测试完毕,准备停掉应用程序
PID TTY TIME CMD
1198 pts/0 00:00:00 login
1235 pts/0 00:00:00 su
1236 pts/0 00:00:00 bash
13585 pts/0 00:00:00 srv_test
13615 pts/0 00:00:00 ps
[root@tsam test]# kill 13585 注释:应用程序已给停掉
someone killed me!
[1]+ Done srv_test
分析:当srv_test以应用程序方式运行时,能成功调用外界的脚本
2.
以服务daemon方式启动:
输入./sdlk start就可以启动服务,stop就可以停止服务。
在一个控制台中,运行tail -f /var/log/messages以监视系统的服务
在另一个控制台中做测试:
[root@tsam test]#./sdlk start 注释:以服务启动
Starting srv_test: OK ]
[root@tsam test]# ./trigger 注释:发送测试包
trigger data sent
[root@tsam test]# ./sdlk stop 注释:停掉服务
Stopping srv_test: OK ]
在测试的过程中,我们能看到 用于监视的控制台的输出信息
May 4 11:12:02 TSAM srv_test: program(daemon) started
May 4 11:12:02 TSAM sdlk: srv_test startup succeeded
May 4 11:12:30 TSAM srv_test: recv data package
//May 4 11:08:51 TSAM smb: smbd shutdown succeeded 没有出现
//May 4 11:08:51 TSAM smb: nmbd shutdown succeeded 没有出现
//May 4 11:08:51 TSAM smb: smbd startup succeeded 没有出现
//May 4 11:08:51 TSAM smb: nmbd startup succeeded 没有出现
May 4 11:12:30 TSAM srv_test: smb should be restarted
May 4 11:12:53 TSAM srv_test: someone killed me!
May 4 11:12:53 TSAM sdlk: srv_test shutdown succeeded
上面的时间有点混乱。但也能说明我的意图。
srv_test能成功启动。但当它收到数据包时,试图调用samba脚本以重启samba时却没有成功。
"//"开头的表示应该出现的消息。但它却没有实际出现。
分析:当srv_test以服务(daemon)方式运行时,未能成功调用外界的脚本
问题:
究竟是什么原因而导致在服务状态下无法调用外界脚本呢?
在调用外界脚本时,我测试过了system函数和exec系列函数,均有同样的结果。
请指教,不胜感激啊^_^ http://boyzxd.myrice.com/daemonhelp.zip
祝各位端午节快乐哈~~~~~
准备:
请建立工作目录
/work/test
然后将这些文件复制进去。
因为脚本sdlk中有写具体的路径名的,如果设置不正确则无法启动服务。
先执行make clean以初始化环境
在执行make后,生成srv_test和trigger后,就可以做测试了
文件介绍:
srv_test.c是测试的源代码
trigger.c是测试客户端源代码
sdlk是控制脚本
makefile是编译文件
srv_test是生成的可执行
trigger是用于发送测试数据包,触发服务端动作
1.
以应用程序方式启动:
[root@tsam test]# srv_test& 注释:不带参数时,应以普通应用程序启动
[1] 13585
program started
[root@tsam test]# trigger 注释:发送测试包
recv data package
trigger data sent
[root@tsam test]# Shutting down SMB services: OK ] 注释:srv_test成功调用到samba控制脚本重启samba
Shutting down NMB services: OK ]
Starting SMB services: OK ]
Starting NMB services: OK ]
smb should be restarted
[root@tsam test]# ps 注释:测试完毕,准备停掉应用程序
PID TTY TIME CMD
1198 pts/0 00:00:00 login
1235 pts/0 00:00:00 su
1236 pts/0 00:00:00 bash
13585 pts/0 00:00:00 srv_test
13615 pts/0 00:00:00 ps
[root@tsam test]# kill 13585 注释:应用程序已给停掉
someone killed me!
[1]+ Done srv_test
分析:当srv_test以应用程序方式运行时,能成功调用外界的脚本
2.
以服务daemon方式启动:
输入./sdlk start就可以启动服务,stop就可以停止服务。
在一个控制台中,运行tail -f /var/log/messages以监视系统的服务
在另一个控制台中做测试:
[root@tsam test]#./sdlk start 注释:以服务启动
Starting srv_test: OK ]
[root@tsam test]# ./trigger 注释:发送测试包
trigger data sent
[root@tsam test]# ./sdlk stop 注释:停掉服务
Stopping srv_test: OK ]
在测试的过程中,我们能看到 用于监视的控制台的输出信息
May 4 11:12:02 TSAM srv_test: program(daemon) started
May 4 11:12:02 TSAM sdlk: srv_test startup succeeded
May 4 11:12:30 TSAM srv_test: recv data package
//May 4 11:08:51 TSAM smb: smbd shutdown succeeded 没有出现
//May 4 11:08:51 TSAM smb: nmbd shutdown succeeded 没有出现
//May 4 11:08:51 TSAM smb: smbd startup succeeded 没有出现
//May 4 11:08:51 TSAM smb: nmbd startup succeeded 没有出现
May 4 11:12:30 TSAM srv_test: smb should be restarted
May 4 11:12:53 TSAM srv_test: someone killed me!
May 4 11:12:53 TSAM sdlk: srv_test shutdown succeeded
上面的时间有点混乱。但也能说明我的意图。
srv_test能成功启动。但当它收到数据包时,试图调用samba脚本以重启samba时却没有成功。
"//"开头的表示应该出现的消息。但它却没有实际出现。
分析:当srv_test以服务(daemon)方式运行时,未能成功调用外界的脚本
问题:
究竟是什么原因而导致在服务状态下无法调用外界脚本呢?
在调用外界脚本时,我测试过了system函数和exec系列函数,均有同样的结果。
请指教,不胜感激啊^_^ http://boyzxd.myrice.com/daemonhelp.zip
祝各位端午节快乐哈~~~~~
|
try this:
char *cmd="your shell command ";
char *argv[]={ "/bin/sh", "-c", cmd, NULL };
exec("/bin/sh",argv);
perror( "Fail to exec():" );
char *cmd="your shell command ";
char *argv[]={ "/bin/sh", "-c", cmd, NULL };
exec("/bin/sh",argv);
perror( "Fail to exec():" );
|
这样可能可以:
char *cmd="/etc/init.d/smb restart";
char *argv[]={ "/bin/sh", "-c", cmd, NULL };
exec("/bin/sh",argv);
perror( "Fail to exec():" );
char *cmd="/etc/init.d/smb restart";
char *argv[]={ "/bin/sh", "-c", cmd, NULL };
exec("/bin/sh",argv);
perror( "Fail to exec():" );
|
跟环境变量有关系么?监控进程是否有些环境变量拿不到。