使用monit

时间:2016-03-21 10:24:35

标签: linux bash ffmpeg monitoring monit

我正在尝试使用monit监视ffmpeg进程。为此,我首先创建了一个包含3个参数(启动,停止和重启)的bash脚本。当我从终端(./thisBashScript start, ./thisBashScript stop and ./thisBashScript restart )手动运行脚本时,一切都完美无缺。该过程启动,创建当前过程id并将其保存到pid文件中。如果我想要停止进程,它将获取当前的pid文件并使用给定的pid终止进程。重新启动也可以正常工作,首先它停止并在启动过程之后。

问题

我安装了monit来监控进程,以防它发生故障。我配置为以确切的方式检查过程,因为我配置了nginx,这非常适用于monit。

之后,当我使用命令./thisBashScript start启动进程时,monit开始监视。在监控状态下,进程ffmpeg显示为正在运行。在我使用ffmpeg进程的pid手动终止进程以测试monit是否重新启动进程后,它无法执行此操作。即使新的pid已创建并保存在/var/run/ffmpeg.pid

以下是monit日志:

[EET Mar 21 12:12:37] error    : 'ffmpeg' process is not running
[EET Mar 21 12:12:37] info     : 'ffmpeg' trying to restart
[EET Mar 21 12:12:37] info     : 'ffmpeg' start: /etc/init.d/iptv/thisBashScript

我有以下bash脚本:

 #!/bin/sh

pid_file="/var/run/ffmpeg.pid"

case "$1" in
 restart)
    /etc/init.d/iptv/thisBashScript stop
    /etc/init.d/iptv/thisBashScript start
        ;;

 start)
    rm $pid_file
        ffmpeg -i udp://@someIp:1234 -acodec libmp3lame -ac 1 -ar 44100 -ab 64k -s 640x360 -deinterlace -vcodec h264_qsv -vb 700k -f flv rtmp://someIp/applicationName/360 &
    ch_pid=$! 
    echo "Start HLS: ffmpeg = $ch_pid";
    echo $ch_pid > $pid_file
         ;;
 stop)
    echo "Stop transcoding";
        kill `cat $pid_file`
         ;;

        *)
    echo "Usage: /etc/init.d/thisBashScript {start|stop|restart}"
         exit 1
         ;;
 esac
exit 0
echo $pid_file

此bash脚本可以接受3个参数(启动,重启和停止)

  • start(启动在nginx rtmp服务器上流式传输视频的ffmpeg命令);

  • 停止(停止ffmpeg命令);

  • 重启(停止然后启动ffmpeg命令);

这是我的monit配置

check process ffmpeg with pidfile /var/run/ffmpeg.pid
    start program = "/etc/init.d/iptv/thisBashScript start"  
    stop program = "/etc/init.d/iptv/thisBashScript stop" 

1 个答案:

答案 0 :(得分:0)

通过创建符号链接来解决问题:

$cordovaFile.writeFile(cordova.file.externalCacheDirectory, "file.pdf", pdf, true)
.then(function(success) {
    console.log("file creato")
}, function(error) {
   console.log("errore creazione file")
});