• <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 戰魂小筑 閱讀(7306) 評論(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| 国内精品伊人久久久久AV影院| 成人资源影音先锋久久资源网| 成人久久久观看免费毛片| 色综合久久中文色婷婷| 一级做a爰片久久毛片看看| 色妞色综合久久夜夜| 精品久久久久国产免费| 97久久国产综合精品女不卡| 久久精品国产精品青草| 亚洲国产成人久久一区久久| 久久精品毛片免费观看| 亚洲?V乱码久久精品蜜桃| 国产婷婷成人久久Av免费高清| 久久黄视频| 国产成人久久激情91| 国产精品99久久久精品无码| 国产99久久久国产精品~~牛| 久久综合国产乱子伦精品免费| 国产精品久久久久乳精品爆| 国产午夜福利精品久久2021| 国产免费久久精品99re丫y| 99热精品久久只有精品| 久久99国产精品久久久| 亚洲成色WWW久久网站| 午夜精品久久久久久影视777| 久久美女网站免费| 久久99国产精品尤物| 久久久av波多野一区二区| 久久精品国产免费观看 | 久久青青草原精品国产| 麻豆久久久9性大片| 久久精品国产国产精品四凭| 久久美女人爽女人爽| 国产精品久久久久久久久| 91久久婷婷国产综合精品青草| 久久婷婷色香五月综合激情| 伊人热热久久原色播放www| 久久人人爽人人人人爽AV| 久久成人国产精品免费软件| 久久久久久精品久久久久|