簡體   English   中英

CGI Bash腳本生成守護進程

[英]CGI Bash script to spawn daemon process

我正在做一個項目,目的是將HDTV從個人計算機流化到支持HTTP Live Streaming的設備(想想iOS設備和某些android)。 我已經將視頻的格式和流媒體方面的內容整理了下來。 我現在嘗試實現的是一種輕松地遠程更改頻道的方法。

我當前的方法涉及通過SSH連接殺死舊流並開始新流。 這有效,但不是很漂亮。 我想要媽媽或女友可以使用的東西。 我決定我將構建一個HTML5應用程序,該應用程序將發布頻道切換CGI腳本。 我目前有一個父進程,該窗體具有一個窗體,該窗體調用子進程來確定流是否正在運行,然后再調用一個子進程來實際調整該流。

當我從計算機流式傳輸實時視頻時,我需要子進程無限期地運行。 不幸的是,當我的父進程完成時,子進程中啟動的后台進程似乎終止了。

我嘗試了一個簡單的&,使用nohup,setsid和daemon。 守護程序運行得最干凈,但在父進程完成時仍會終止。 即使帶有-r標志。 我將代碼放在下面,也許有人會對如何實現此方法或實現相同目標的更好方法有所了解? 謝謝! (哦,我知道殺死vlc並不是殺死流的一種漂亮方法,如果您有更好的方法,那么我將不勝枚舉)

parent invoking child:
----------------------
./ChangeChannel.sh $channel     #passed from form submission


child (ChangeChannel.sh):
-------------------------
#!/bin/bash

directory=./Channels/
newchannel=$1

if [ $(pidof vlc) ]
    then
        sudo kill $(pidof vlc)
fi
daemon -r -v -d $directory$newchannel &


subchild example:
-----------------
vlc atsc://frequency=605029000 --intf=dummy --sout-transcode-audio-sync :live-cache=3000 --sout='#transcode{vcodec=h264,vb=150,fps=25,width=480,scale=1,venc=x264{aud,profile=baseline,level=30,keyint=15,bframes=0,ref=1},acodec=aac,ab=40,channels=2,samplerate=22050}:duplicate{dst=std{mux=ts,dst=-,access=livehttp{seglen=16,delsegs=true,numsegs=10,index=/var/www/stream/live.m3u8,index-url=content/live-######.ts},mux=ts{use-key-frames},dst=/var/www/stream/content/live-######.ts,ratecontrol=true}}'

我如何防止子孩子終止??? 在Ubuntu 12.04上運行Apache

我知道了!

對於任何對此感興趣的人,我都改變了使用nohup,&,disown和> / dev / null 2>&1的策略。

老實說,仍然不太確定我是如何工作的……只是經過反復嘗試和一些有根據的猜測。 我的代碼如下:

parent invocation:
------------------
nohup ./ChangeChannel.sh $channel & disown


child invocation:
-----------------
sudo nohup su user $directory$newchannel &> /dev/null 2>&1


subchild invocation:
--------------------
vlc atsc://frequency=605029000 --intf=dummy --sout-transcode-audio-sync :live-cache=3000 --sout='#transcode{vcodec=h264,vb=150,fps=25,width=480,scale=1,venc=x264{aud,profile=baseline,level=30,keyint=15,bframes=0,ref=1},acodec=aac,ab=40,channels=2,samplerate=22050}:duplicate{dst=std{mux=ts,dst=-,access=livehttp{seglen=16,delsegs=true,numsegs=10,index=/var/www/stream/live.m3u8,index-url=content/live-######.ts},mux=ts{use-key-frames},dst=/var/www/stream/content/live-######.ts,ratecontrol=true}}' & disown

ChangeChannel.sh使用sudo通過cgi執行su,以便以root用戶以外的用戶身份執行vlc。 看起來有點混亂,但是它確實可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM