• <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>

            戰魂小筑

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

               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              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:          /* 子進程繼續執行 */ 
              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 編寫服務腳本

            參考鏈接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 創建服務

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

            將服務文件拷貝到/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

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

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

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

            posted on 2012-02-28 10:52 戰魂小筑 閱讀(7305) 評論(4)  編輯 收藏 引用 所屬分類: 網絡 服務器技術C++/ 編程語言

            評論

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

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

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

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

            国产精品伊人久久伊人电影| 成人免费网站久久久| 久久99精品久久久久久久不卡| 女同久久| 欧美久久一级内射wwwwww.| 久久99国产亚洲高清观看首页| 久久亚洲精品无码VA大香大香| 伊人久久大香线蕉无码麻豆| 一本一道久久a久久精品综合| 亚洲伊人久久成综合人影院 | 久久黄视频| 中文精品久久久久人妻不卡| 亚洲色欲久久久久综合网| 久久99精品国产麻豆蜜芽| 好属妞这里只有精品久久| 国产精品久久国产精麻豆99网站| 国产精品久久毛片完整版| 国产午夜福利精品久久| 美女久久久久久| 九九精品99久久久香蕉| 国产精品美女久久久久av爽| 久久无码精品一区二区三区| 亚洲精品无码久久久影院相关影片| 久久久久亚洲av无码专区| 日本免费一区二区久久人人澡| 色综合久久中文字幕无码| 天天影视色香欲综合久久| 成人精品一区二区久久| 久久99国产精品二区不卡| 狼狼综合久久久久综合网| 亚洲中文精品久久久久久不卡| 久久综合色区| 久久久免费观成人影院| 久久精品综合一区二区三区| 久久久久夜夜夜精品国产| 精品国产一区二区三区久久| 久久亚洲AV成人出白浆无码国产| 狠狠色丁香久久婷婷综合| 奇米影视7777久久精品| 亚洲AV无码久久精品成人| 久久无码人妻一区二区三区|