国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

如何通過監(jiān)控重啟服務呢?

qq7467466

問題描述

我在db里面插入一條記錄,每條記錄代表代表一個進程, 如果有新的進程進來或者狀態(tài)更新, 那么需要新增進程/禁用相應的進程,這樣的功能應該如何實現(xiàn)呢?

想到的解決方案

簡單粗暴的方法就行通過php start.php restart -d 去執(zhí)行重啟命令, 但是因為db里面的數(shù)據(jù)是隨時可能發(fā)生變化的, 不能每次都去手動的執(zhí)行重啟, 因此想到了借鑒內(nèi)存溢出重啟/文件監(jiān)控的方案, posix_kill($ppid, SIGUSR1) 但是測試了下是直接重啟的當前進程, 我新增的進程不會,所以應該要如何搞呢, 有指令可以發(fā)送重啟的命令嗎? 測試過了reload不符合我的業(yè)務邏輯,必須用restart

這是我插件自定的process, kafkaConfig是DB讀出來的數(shù)據(jù)

$process = [];
foreach ($kafkaConfig as $value) {
    if($value){
        $process[$value['app_uid']] = [
            'handler'     => \app\queue\kafka\Events::class,
            'count'       => $value['count'], // 進程數(shù)
            //'user'    => $group_id,
            //'group'   => $group_id,
            'constructor' => [
                'groupId'    => $value['app_uid'],
                'partition'  => $value['partition'],
                'messageKey' => $value['messageKey'] ?? '',
            ]
        ];
    }
}
return $process;

新起一個監(jiān)控進程monitor_kafka_config

檢測DB數(shù)據(jù)...發(fā)生改變,執(zhí)行一下命令

測試的命令
$ppid = posix_getppid();
$pid = posix_getpid();
posix_kill($ppid, SIGINT);
posix_kill($pid, SIGUSR1);
1594 4 0
4個回答

軟飯工程師

這是我的一些大致想法
1,是否真的需要重啟進程?能否以數(shù)據(jù)或者回調(diào)函數(shù)來驅(qū)動進程內(nèi)邏輯的執(zhí)行
2,是否可以使用自定義進程之類的方法,提前啟動需要的進程,然后進行進程分配,老大說的重啟單個進程 http://wtbis.cn/q/510
3,是否可以使用fork子進程的方法來創(chuàng)建進程并銷毀進程,只創(chuàng)建和銷毀進程,不重啟

  • qq7467466 2023-08-23

    這個我試過, 因為我process里面最終不是return 出來一個數(shù)組嗎? 動態(tài)的, kill掉并重啟的話只會重啟第一次渲染出來process, 比如說我首次動態(tài)啟動了5個進程, 然后這時候db增加了1個進程, 按理說kill掉主進程之后這時候應該會出來6個進程, 但是測試的時候并不會把新的進程自動啟動進來

  • 軟飯工程師 2023-08-23

    既然這樣,你想辦法把進程數(shù)寫到服務器環(huán)境變量里或者寫到文件里,然后kill 掉所有的webman 進程,包括主進程,然后用supervisord拉起webman 主進程并讀取進程數(shù)量

  • 軟飯工程師 2023-08-23

    也就是說把進程數(shù)量做持久化,然后主動殺死所有的webman進程,這個時候進程數(shù)還在,讀取進程數(shù),然后依賴docker 健康檢查或者supervisord 把webman 服務拉起來

  • qq7467466 2023-08-23

    感謝大佬回復, 我試下在主程序里面直接kill掉主進程, 然后用supervisord拉起進程

  • 軟飯工程師 2023-08-23

    直接使用php start.php stop 殺死進程,然后用supervisord或者docker 健康檢查拉起進程

北月妖王

首選 workerman 不支持業(yè)務調(diào)用 pcntl_fork,進程一旦啟動就不能動態(tài)修改進程數(shù),想要根據(jù)數(shù)據(jù)庫變化進程數(shù)就只能重啟。

另外起一個 Workerman,用 Timer 或者 workerman/redis-queue,監(jiān)控數(shù)據(jù)庫變動,然后再去重啟 webman。

  • qq7467466 2023-08-23

    怎么用一個新的Workman 去重啟 webman 呢?

  • 北月妖王 2023-08-23

    如果你不想那么復雜,可以采用簡單粗暴的做法:shell_exec("php /path/to/webman/start.php restart -d");

  • qq7467466 2023-08-23

    我試過了, 報錯 Workerman[start.php] stopping ... worker[monitor_kafka_config:5099] exit with status 9 Workerman[start.php] has been stopped PHP Notice: fwrite(): write of 152 bytes failed with errno=32 Broken pipe in /data/wwwroot/cloud-events_test/vendor/workerman/workerman/Worker.php on line 2254

  • 北月妖王 2023-08-23

    你自己的業(yè)務代碼有問題,重新拉一個空的webman項目跑一下,是OK的。

    截圖

  • qq7467466 2023-08-23

    你的這個重啟命令是在 那個進程里面寫的呢? 能貼下代碼嗎

  • 北月妖王 2023-08-23

    代碼很簡單就一個定時器:截圖

  • qq7467466 2023-08-23

    我已經(jīng)找到指令了, \posix_kill(posix_getppid(), SIGINT); 然后配合守護進程啟動, 很棒! 感謝大佬

軟飯工程師

我配置了健康檢查,并將進程數(shù)作為環(huán)境變量傳入容器,在容器中手動通過,php start.php stop 停止容器,幾秒鐘后容器被健康檢查拉起
截圖
容器中,也能從環(huán)境變量讀取到進程數(shù),
截圖
現(xiàn)在就是怎么處理進程數(shù)的問題。
如上面老哥所說,再起個Workerman 進程維護進程數(shù)量,然后通過workman 定時器 拉起 webman 服務也很好

  • 暫無評論
efnic

目前我通過這個方法,實現(xiàn)增減進程。
http://wtbis.cn/q/11025
用模型事件:

  1. 當增加或者停止進程時,生成./runtime/restart.crontab;
  2. 使用系統(tǒng)本身的crontab,定期執(zhí)行一個重啟webman的php腳本
  • 暫無評論
年代過于久遠,無法發(fā)表回答
??