Linux下添加自定义service

描述:将自己编写的Daemon注册成service,类似windows的注册表。并在开机时启动。

  1. 编译Daemon进程

    void creat_daemon(){
        int pid, ret;
        //创建子进程并结束父进程
        pid = fork();
        if(pid > 0){
            exit(0);
        }
        //子进程创建新会话
        pid = setsid();
        if(pid == -1){
            perror("Error setsid!\r\n");
            exit(1);
        }
        //改变工作目录
        ret = chdir("/");
        //设置权限
        umask(0);
        //关闭描述符
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
    }
    int main(char argc, char **argv)
    {
    	creat_daemon();
    	
    	/*************/
    	代码段
    	/************/
    
    	return 0;
    }
    
  2. 编写管理脚本:
    脚本名字不能加后缀,示例:my-start-script

    #!/bin/bash
    
    ### BEGIN INIT INFO
    # Provides:		mydaemon
    # Required-Start:	$remote_fs $syslog
    # Required-Stop:	$remote_fs $syslog
    # Default-Start:	3 4 5
    # Default-Stop:		0 1 2 6
    # Short-Description:	Open mydaemon server
    ### END INIT INFO
    
    myPath=/opt/mydir	#编译后的daeman文件所在目录
    myName=mydaemon		#daeman文件名
    
    start()
    {
    	if [ -x $myPath"/"$myName ];then	#检查文件是否可执行
    		pid=`pgrep $myName`
    		if [ -z $pid ];then				#若进程没有启动,则启动
    			$myPath"/"$myName
    		fi
    	fi
    }
    
    stop()
    {
    	pid=`pgrep $myName`
    	if [ $pid ];then					#若进程已经启动,则杀掉
    		kill -9 $pid
    
    		for i in {1..100}				#等待进程启动完成
    		do
    			sleep 0.01
    			pid=`pgrep $myName`
    			if [ -z $pid ];then
    				break
    			fi
    		done
    	fi
    }
    
    case $1 in
    	start)
    		start
    		;;
    	stop)
    		stop
    		;;
    	*)
    		;;
    esac
    

    脚本中没有写restart,但sudo service mydaemon restart命令依然可用。这是因为restart参数被理解为stop然后start,所以上面的sleep就是用来等待stop结束的,以免restart参数错误。

  3. 将脚本放到/etc/init.d目录下执行:

    sudo update-rc.d mydaemon defaults
    sudo service mydaemon start
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值