最近爲南方基地的平臺編寫監控接口,採用BS構架,其中有一個監測虛擬機是否宕機的功能。
過程爲:監控機發出訪問請求-->接口分析請求-->啓動socket檢測目標虛擬機是否宕機。
因爲通過ICMP協議檢測,所以用了 SOCK_RAW 的socket類型。
服務器使用apache + php + mysql,發現程序出錯,提示說沒有權限創建socket。後來查資源得知,此類socket需要root權限或者以cgi方式跑php結合用 setuid() 才能創建socket。
解決方法:改用nginx+php-cgi+mysql解決。
在編譯php的時候,要做以下修改才能用root用戶啓動服務。
1.找到php的源代碼$src_path/sapi/cgi/fpm/fpm_unix.c (版本不一樣,最好是通過 find $src_path -name fpm_unix.c)
2.在文件頂部增加一個宏定義:#define I_REALLY_WANT_ROOT_PHP
3.重新 configure make make install
4.php-fpm.conf 將user、group都修改成root
BS模式中用php創建socket 無權限的解決辦法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
全方位深度剖析PHP7底层源码
wy53780
2020-04-23 15:39:33
Redis主從複製以及主從複製原理
LoyaltyLu
2019-02-24 23:12:38
nginx+php執行請求的工作原理
xavier
2019-02-24 15:52:41
配置Nginx支持php,出現No input file specified錯誤的解決方法
lvqingpu
2019-02-24 13:15:35
如果同事暗中傷害你,應該怎麼辦?
這個饅頭有餡
2019-02-24 13:59:08
職場中,抱怨越多的員工,越被領導瞧不起!
這個饅頭有餡
2019-02-24 13:59:08
老程序員被裁,應屆生卻能月薪 1.3 萬?這你能忍?
前端高達
2019-02-24 13:48:04
遇到到處蹭吃卻從不請客吃飯的主怎麼辦?
樑軍年
2019-02-24 13:26:35
Linux基本操作命令
wbzjacky
2019-02-24 13:12:38
高標準機房綜合配線安裝
wbzjacky
2019-02-24 13:12:38
IPsec ***實驗
wbzjacky
2019-02-24 13:12:37
真實的模擬***綜合實驗
wbzjacky
2019-02-24 13:12:37