免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2176 | 回复: 5
打印 上一主题 下一主题

如何把自己的daemon添加到系统服务中? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-02 10:30 |只看该作者 |倒序浏览
我自己写了一个简单的daemon,运行基本良好。现在希望把它加入到
系统服务中,以便每次能够自动启动等。我先把它拷贝到/etc/init.d/
然后运行
# chkconfig --add exampled
结果出现:exampled 服务不支持chkconfig
我试着运行了一下vsftpd等daemon,--add, --del, 等都是没有问题
的,请问应该在我的代码中加上什么?谢谢。

我的daemon大致跟下面这个example类似:
#include <stdio.h>;
#include <fcntl.h>;
#include <signal.h>;
#include <unistd.h>;

#define RUNNING_DIR   "/tmp"
#define LOCK_FILE   "exampled.lock"
#define LOG_FILE   "exampled.log"

void log_message(filename,message)
char *filename;
char *message;
{
FILE *logfile;
   logfile=fopen(filename,"a";
   if(!logfile) return;
   fprintf(logfile,"%s\n",message);
   fclose(logfile);
}

void signal_handler(sig)
int sig;
{
   switch(sig) {
   case SIGHUP:
      signal(SIGHUP,signal_handler);
      log_message(LOG_FILE,"hangup signal catched";
      break;
   case SIGTERM:
      log_message(LOG_FILE,"terminate signal catched";
      exit(0);
      break;
   }
}

void daemonize()
{
int i,lfp;
char str[10];
   if(getppid()==1) return; /* already a daemon */
   i=fork();
   if (i<0) exit(1); /* fork error */
   if (i>;0) exit(0); /* parent exits */
   /* child (daemon) continues */
   setsid(); /* obtain a new process group */
   for (i=getdtablesize();i>;=0;--i) close(i); /* close all descriptors */
   i=open("/dev/null",O_RDWR); dup(i); dup(i); /* handle standart I/O */
   umask(027); /* set newly created file permissions */
   chdir(RUNNING_DIR); /* change running directory */
   lfp=open(LOCK_FILE,O_RDWR|O_CREAT,0640);
   if (lfp<0) exit(1); /* can not open */
   if (lockf(lfp,F_TLOCK,0)<0) exit(0); /* can not lock */
   /* first instance continues */
   sprintf(str,"%d\n",getpid());
   write(lfp,str,strlen(str)); /* record pid to lockfile */
   signal(SIGCHLD,SIG_IGN); /* ignore child */
   signal(SIGTSTP,SIG_IGN); /* ignore tty signals */
   signal(SIGTTOU,SIG_IGN);
   signal(SIGTTIN,SIG_IGN);
   signal(SIGHUP,signal_handler); /* catch hangup signal */
   signal(SIGTERM,signal_handler); /* catch kill signal */
}

main()
{
   daemonize();
   while(1) sleep(1); /* run */
}

论坛徽章:
0
2 [报告]
发表于 2005-08-02 10:34 |只看该作者

如何把自己的daemon添加到系统服务中?

启动脚本都是shell脚本,接受start/stop/restart等参数,从它来启动真正的daemon。

可以到/etc/rc.d/init.d/下抓一个来分析

论坛徽章:
0
3 [报告]
发表于 2005-08-02 10:38 |只看该作者

如何把自己的daemon添加到系统服务中?

在/etc/rc.d/init.d建立启动脚本
比如你的启动脚本叫server
然后:chkconfig server on

论坛徽章:
0
4 [报告]
发表于 2005-08-02 10:44 |只看该作者

如何把自己的daemon添加到系统服务中?

示例如下
编辑/etc/services加入一行(假定服务名为test)
#This line is added for socket test
test               1976/tcp                           #socket test

编辑/etc/inetd.conf
#This line is aded for socket test
test stream tcp nowait root /tmp/sock_test test

假定编译后的可执行程序是/temp/sock_test

重启inetd服务器
killall -HUP inetd

实用telnet 测试
telnet localhost 1976
查看显示信息

论坛徽章:
0
5 [报告]
发表于 2005-08-02 11:31 |只看该作者

如何把自己的daemon添加到系统服务中?

搞定了,谢谢楼上几位兄弟,我之前有点搞错了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2005-08-02 11:45 |只看该作者

如何把自己的daemon添加到系统服务中?

Linux 版前几天见过这样一个帖子,有人给出答案了。可以去找找。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP