• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

            1.1 為進程添加守護進程

            參考鏈接http://yubosun.akcms.com/tech/linux-daemon-program.htm

               1:  #include <unistd.h> 
               2:  #include <signal.h> 
               3:  #include <sys/types.h> 
               4:  #include <sys/stat.h> 
               5:  #include <stdio.h> 
               6:  #include <stdlib.h>
               7:   
               8:  #ifndef NOFILE 
               9:  #define NOFILE 3 
              10:  #endif
              11:   
              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:          /* 子進程繼續(xù)執(zhí)行 */ 
              21:          setsid(); //創(chuàng)建新的會話組,子進程成為組長,并與控制終端分離 
              22:   
              23:          /* 防止子進程(組長)獲取控制終端 */ 
              24:          if(pid = fork()) exit(0); //父進程,退出 
              25:   
              26:          else if(pid < 0) exit(1); //fork錯誤,退出 
              27:   
              28:          /* 第二子進程繼續(xù)執(zhí)行 , 第二子進程不再是會會話組組長*/ 
              29:   
              30:          //for(i = 0; i < NOFILE; i++) /* 關(guān)閉打開的文件描述符*/ 
              31:          //{ 
              32:          //close(i); 
              33:          //} 
              34:          chdir("/tmp"); /* 切換工作目錄 */ 
              35:          umask(0); /* 重設(shè)文件創(chuàng)建掩碼 */ 
              36:          return; 
              37:  }
              38:   
              39:  int main(int argc, char* argv[])
              40:  {    
              41:      FILE *fp; 
              42:   
              43:      signal(SIGCHLD, SIG_IGN); /* 忽略子進程結(jié)束信號,防止出現(xiàn)僵尸進程 */ 
              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 編寫服務(wù)腳本

            參考鏈接http://blog.sina.com.cn/s/blog_57421ff80100c7nn.html

            紅色字是需要填寫的部分, 文件頭部分可以選填

               1:  #!/bin/bash
               2:   
               3:  # chkconfig: 3 3 1
               4:   
               5:  # description: web kill center
               6:   
               7:  EXEC_PATH=/usr/local/bin
               8:   
               9:  EXEC=CenterServiced
              10:   
              11:  PID_FILE=/var/run/CenterServiced.pid
              12:   
              13:  DAEMON=/usr/local/bin/CenterServiced
              14:   
              15:  if ! [ -x $EXEC_PATH/$EXEC ] ; then
              16:   
              17:  echo "ERROR: $EXEC_PATH/$EXEC not found"
              18:   
              19:  exit 1
              20:   
              21:  fi
              22:   
              23:  stop()
              24:   
              25:  {
              26:   
              27:  echo "Stoping $EXEC ..."
              28:   
              29:  killall $DAEMON >/dev/null
              30:   
              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:  stop
              52:   
              53:  start
              54:   
              55:  }
              56:   
              57:  case "$1" in
              58:   
              59:  start)
              60:   
              61:  start
              62:   
              63:  ;;
              64:   
              65:  stop)
              66:   
              67:  stop
              68:   
              69:  ;;
              70:   
              71:  restart)
              72:   
              73:  restart
              74:   
              75:  ;;
              76:   
              77:  status)
              78:   
              79:  status -p $PID_FILE $DAEMON
              80:   
              81:  ;;
              82:   
              83:  *)
              84:   
              85:  echo "Usage: service $EXEC {start|stop|restart|status}"
              86:   
              87:  exit 1
              88:   
              89:  esac
              90:   
              91:  exit $?
              92:   

            1.3 創(chuàng)建服務(wù)

            參考鏈接http://hi.baidu.com/guanxiansun/blog/item/b4c7dcf55f6011e47709d724.html

            將服務(wù)文件拷貝到/etc/init.d下,去掉擴展名, 文件名即是服務(wù)名

            chmod +x ./wkcenter

            如果不設(shè)置啟動, 那么service中將無法找到該服務(wù)及操作

            1.4 設(shè)置啟動順序

            創(chuàng)建啟動鏈接

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

            創(chuàng)建關(guān)閉鏈接

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

            1.5 添加服務(wù)

            chkconfig --add wkcenter

            查看服務(wù)是否存在

            chkconfig –-list | grep wkcenter

            查看服務(wù)狀態(tài)

            chkconfig wkcenter on

            注意, 確認wkcenter在2,3,4,5中任意或者部分開啟, 必須為綠字. 灰字代表服務(wù)無法開機啟動或者其他問題

            1.6 測試

            臨時開啟命令測試

            service wkcenter start

            1.7 QA

            參考鏈接: http://blog.526net.com/?p=1706

            1. 服務(wù)切記不可放在用戶home目錄, 最好放在/usr/local/bin目錄, 日志寫到var中, 否則服務(wù)測試正常,但是無法自動啟動

            2. Linux下, 父進程啟動的程序的生命期跟隨父進程, 父進程可以是終端, 父進程一旦終止, 子進程都必須結(jié)束. 因此守護進程需要脫離父進程,避免被父進程生命期控制


            評論

            # re: Linux服務(wù)器守護進程+自動啟動+服務(wù)配置筆記 2012-02-29 09:06 Alex-Lee
            太好了,正需要一個這個文章。一直沒有找全,今天終于發(fā)現(xiàn)了。  回復(fù)  更多評論
              

            # re: Linux服務(wù)器守護進程+自動啟動+服務(wù)配置筆記 2012-02-29 09:11 tb
            不錯的 文章  回復(fù)  更多評論
              

            # re: Linux服務(wù)器守護進程+自動啟動+服務(wù)配置筆記 2012-02-29 22:59 我要去拯救世界
            linux進程守護貌似有很多成熟的腳本,
            不過還是支持大牛了  回復(fù)  更多評論
              

            # re: Linux服務(wù)器守護進程+自動啟動+服務(wù)配置筆記[未登錄] 2015-03-03 17:31 aa
            感謝  回復(fù)  更多評論
              

            久久久黄片| www亚洲欲色成人久久精品| 久久久人妻精品无码一区 | 久久精品国产亚洲7777| 青青青伊人色综合久久| 久久久久久久综合日本| 久久综合色区| 久久久久99精品成人片| 久久久久国产视频电影| 欧美久久久久久午夜精品| 香蕉久久永久视频| 国产精品久久久久久福利69堂| 国产精品久久亚洲不卡动漫| 精品国产乱码久久久久久1区2区| 久久久久国产一级毛片高清版| 久久久久一本毛久久久| 久久久久久人妻无码| 亚洲精品WWW久久久久久| 99re这里只有精品热久久| 亚洲色欲久久久久综合网| 久久99久久99小草精品免视看| 久久亚洲sm情趣捆绑调教| 国产香蕉97碰碰久久人人| 曰曰摸天天摸人人看久久久| 国产精品禁18久久久夂久| 亚洲中文精品久久久久久不卡| 亚洲精品视频久久久| 久久久亚洲裙底偷窥综合| 亚洲精品99久久久久中文字幕| 久久夜色撩人精品国产| 2021国内久久精品| 久久久久久亚洲AV无码专区 | 亚洲精品久久久www| 亚洲精品白浆高清久久久久久 | 无码AV中文字幕久久专区 | 99久久国产热无码精品免费| 久久久噜噜噜久久熟女AA片| 久久精品一区二区国产| 久久国产精品免费一区| 久久人与动人物a级毛片| 国产精品美女久久久久AV福利|