-1

我试图用 monit 而不是 supervisord 监视 laravel-websocket,因为它提供了更多选项所以在我的 /home/rabter/laravelwebsocket.sh 中:

#!/bin/bash
case $1 in
        start)
                echo $$ > /var/run/laravelwebsocket.pid;
                exec 2>&1 php /home/rabter/core/artisan websockets:serve  1>/tmp/laravelwebsocket.out
                ;;
        stop)  
                kill `cat /var/run/laravelwebsocket.pid` ;;
        *)  
                echo "usage: laravelwebsocket.sh {start|stop}" ;;
esac
exit 0

在 etc/monit.d 我用代码创建了一个名为 cwp.laravelwebsocket 的文件

check process laravelwebsocket with pidfile /var/run/laravelwebsocket.pid
start program "/bin/bash -c  /home/rabter/laravelwebsocket.sh start"
stop program "/bin/bash -c  /home/rabter/laravelwebsocket.sh stop"
if failed port 6001 then restart
if 4 restarts within 8 cycles then timeout

不幸的是,随着我运行 monit,一切都开始受到监控,但 laravel websocket,它不会启动一次,并且在前面的 monit table 中我看到了 Process - laravelwebsocket Execution failed | Does not exist 如何使 monit monitor 并在启动时启动 laravel-websocket 失败或错误或崩溃?

我研究了用 Monit 监控 Laravel 队列工作人员, 但没有运气!

4

1 回答 1

1

您的 bash 脚本将它自己的 pid 插入到您的 pid 文件中。另外,如果使用monit,php进程应该被发送到后台,因为monit是一个监控工具,而不是一个监督者。

#!/usr/bin/env bash

case $1 in
    start)
        php /home/rabter/core/artisan websockets:serve & 2>&1 >/tmp/laravelwebsocket.out
        echo $! > /var/run/laravelwebsocket.pid;
        ;;
    stop)
        kill $(cat /var/run/laravelwebsocket.pid) ;;
    *)
        echo "usage: $(basename $0) {start|stop}" ;;
    esac
exit 0

然后使用 . 使该文件可执行chmod +x FILEPATH

现在应该可以工作了:

check process laravelwebsocket with pidfile /var/run/laravelwebsocket.pid
    start program "/home/rabter/laravelwebsocket.sh start"
    stop program "/home/rabter/laravelwebsocket.sh stop"

    if failed port 6001 then restart
    if 4 restarts within 8 cycles then timeout

您是否使用 monit 作为容器的初始化系统?如果是这样,请告诉我。然后应用更多细节。

于 2020-03-04T19:21:56.830 回答