Сценарий VLC на сервере человечности

попробуйте правило UDEV, запускайте скрипт каждый раз, когда вы Подключите модем.

ACTION=="add", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="UUUU", RUN+="/home/user/script.sh"

Замените XXXX и UUUU с продуктом поставщика и идентификатора, поставьте правило в /etc/udev/rules.d/99-yourrule.rules и перезагрузите или перезагрузите UDEV. Должен работать

0
04.01.2015, 15:47
3 ответа

Обычный способ отправки в фоновом режиме Процесс состоит в том, чтобы использовать оператор & после вашей команды (как предложено Гленн).

иметь возможность для индивидуальности статуса процесса через некоторое время вам нужно знать его PID. Таким образом, вам нужно найти способ захватить PID (ID процесса) процесса, только что запущен.
Это доступно в $! Переменная .

Обратите внимание, что необходимо хранить его в другой переменной , потому что он будет обновляться после каждого вызова команды. В этом случае Вы можете хранить PID в файле, который вы можете использовать позже со вторым сценарием .
Хорошее место, где хранить, кажется, / var / lock / yourscripdirectory / lock .
В каждом перезагрузке этот каталог должен быть очищен автоматически.

Ваш первый скрипт (давайте мы назовем это S1.SH )) должны выполнять ваши команды и хранить PID и могут быть похоже на один приведенный ниже:

#!/bin/sh
MyLockDir="/var/lock/${0##*/}"
mkdir -P     # it creates if needed the directory
             # /var/lock/yourscriptname without its path 
cvlc -vvv v1 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5656,access=http}" &
echo $! >${MyLockDir}/5656  # here you store in the file 5656 the PID
cvlc -vvv v2 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5657,access=http}" &
echo $! >${MyLockDir}/5657
cvlc -vvv v3 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5658,access=http}" &
echo $! >${MyLockDir}/5658

второй скрипт (давайте позвоним S2.SH ) должен проверить, был ли процесс с помощью PID , написанный в файле, созданном ранее. Он должен CHECJ, если он все еще работает и обновлять его при необходимости. Несколько подсказки от линий ниже:

#!/bin/sh
MyPort=$2
MyLockDir="/var/lock/s1.sh"
mypid="$(cat ${MyLockDir}/${MyPort})"
ps -p $mypid > /dev/null; 
if [ $? == 0 ] ; 
  then                       # Running
    echo "# It runs ... " ;  # or whatever you want
  else                       # NOT Running 
   cvlc -vvv $1 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:$MyPort,access=http}" &
   echo $! >${MyLockDir}/$MyPort
fi

E.G. Вы можете запустить второй скрипт . / S2.SH V1 5656 (или с . / S2.SH V2 5657 ...) Для каждого единственного порта вам нужна.

немного более сложный способ сделать, это создать для каждого порта каталог с таким именем в вашем Lockdir и поместите файл блокировки с помощью PID внутри него, ловить команду удаления для каталога в Сам скрипт и проверьте позже, если каталог существует ... Смотрите намеки здесь

Таким образом даст вам страхование, что только один одновременный сценарий может создать его и запустить экземпляр CVLC на этом порту Отказ


Обновление: комментарий
Q: зачем предлагать хранить PID вместо этого, чтобы проверить его с другими командами, такими как PS -EF | grep '5657' ?. A: В целом PID процесса уникален, тем временем вы не можете заранее знать, если строка, которую вы используете в GREP , вывод не используется другой командой ... PID существует по этой причине :)

0
28.01.2020, 02:51

Как насчет попробовать это: NOHUP Ваша команда &

«NOHUP» гарантирует, что процесс не будет прекращен после выхода из системы и «&» на Конец гарантирует, что целая команда будет работать на фоне.

0
28.01.2020, 02:51

Вы можете выполнить сценарий bash в фоновом режиме с помощью screen.

Пожалуйста, прочтите об этом следующие статьи.

https://www.howtoforge.com/linux_screen

http://www.tecmint.com/screen-command-examples-to-manage-linux-terminals/

https: // www. rakaid.com/blog/linux-screen-tutorial-and-how-to/

Вы можете использовать monit , чтобы команда продолжала работать. Он запустится, если служба выйдет из строя.

1
28.01.2020, 02:51

Теги

Похожие вопросы