linux服务器开机管理,Linux服务器守护进程+自动启动+服务配置笔记

1.1 为进程添加守护进程

1:#include 2:#include 3:#include 4:#include 5:#include 6:#include 7:8:#ifndef NOFILE9:#define NOFILE 310:#endif11:12:void init_daemon()13:{14: int pid;15: int i;16: if(pid = fork()) exit(0); //父进程,退出17:18: else if(pid < 0) exit(1); //fork失败19:20: /* 子进程继续执行 */21: setsid(); //创建新的会话组,子进程成为组长,并与控制终端分离22:23: /* 防止子进程(组长)获取控制终端 */24: if(pid = fork()) exit(0); //父进程,退出25:26: else if(pid < 0) exit(1); //fork错误,退出27:28: /* 第二子进程继续执行 , 第二子进程不再是会会话组组长*/29:30: //for(i = 0; i < NOFILE; i++) /* 关闭打开的文件描述符*/31: //{32: //close(i);33: //}34: chdir("/tmp"); /* 切换工作目录 */35: umask(0); /* 重设文件创建掩码 */36: return;37:}38:39:int main(int argc, char* argv[])40:{41: FILE *fp;42:43: signal(SIGCHLD, SIG_IGN); /* 忽略子进程结束信号,防止出现僵尸进程 */44:45: init_daemon();46:47: while(1)48: {49: sleep(1);50:51:// 注意, 日志写到这个目录52: if((fp = fopen("/var/tmp/test.log", "a")) != NULL)53: {54: fprintf(fp, "%s\n", "test message");55: fclose(fp);56: }57: }58:59: return 0;60:}

1.2 编写服务脚本

红色字是需要填写的部分, 文件头部分可以选填

1:#!/bin/bash2:3:# chkconfig: 3 3 14:5:# description: web kill center6:7:EXEC_PATH=/usr/local/bin8:9:EXEC=CenterServiced10:11:PID_FILE=/var/run/CenterServiced.pid12:13:DAEMON=/usr/local/bin/CenterServiced14:15:if ! [ -x $EXEC_PATH/$EXEC ] ; then16:17:echo "ERROR: $EXEC_PATH/$EXEC not found"18:19:exit 120:21:fi22:23:stop()24:25:{26:27:echo "Stoping $EXEC ..."28:29:killall $DAEMON >/dev/null30:31:echo "Shutting down $EXEC: [ OK ]"32:33:}34:35:start()36:37:{38:39:echo "Starting $EXEC ..."40:41:$DAEMON > /dev/null &42:43:echo "Starting $EXEC: [ OK ]"44:45:}46:47:restart()48:49:{50:51:stop52:53:start54:55:}56:57:case "$1" in58:59:start)60:61:start62:63:;;64:65:stop)66:67:stop68:69:;;70:71:restart)72:73:restart74:75:;;76:77:status)78:79:status -p $PID_FILE $DAEMON80:81:;;82:83:*)84:85:echo "Usage: service $EXEC {start|stop|restart|status}"86:87:exit 188:89:esac90:91:exit $?92:

1.3 创建服务

将服务文件拷贝到/etc/init.d下,去掉扩展名, 文件名即是服务名

chmod +x ./wkcenter

如果不设置启动, 那么service中将无法找到该服务及操作

1.4 设置启动顺序

创建启动链接

ln /etc/init.d/wkcenter /etc/rc3.d/S03wkcenter

创建关闭链接

ln /etc/init.d/wkcenter /etc/rc0.d/K03wkcenter

1.5 添加服务

chkconfig --add wkcenter

查看服务是否存在

chkconfig –-list | grep wkcenter

查看服务状态

chkconfig wkcenter on

注意, 确认wkcenter在2,3,4,5中任意或者部分开启, 必须为绿字. 灰字代表服务无法开机启动或者其他问题

1.6 测试

临时开启命令测试

service wkcenter start

1.7 QA

1. 服务切记不可放在用户home目录, 最好放在/usr/local/bin目录, 日志写到var中, 否则服务测试正常,但是无法自动启动

2. Linux下, 父进程启动的程序的生命期跟随父进程, 父进程可以是终端, 父进程一旦终止, 子进程都必须结束. 因此守护进程需要脱离父进程,避免被父进程生命期控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值