Кто-то просил полную версию трека из мануала по Sony Vegas, держите.
Прямая ссылка: https://youtu.be/Aqo0lNU6rZw
Кто-то просил полную версию трека из мануала по Sony Vegas, держите.
Прямая ссылка: https://youtu.be/Aqo0lNU6rZw
В Linux практически любой процесс можно сделать фоновым, для чего достаточно добавить &
через пробел после команды. Например:
openvpn --config ~/vpn/myvpn.ovpn &
Да, про опцию конфига daemon
писать в комментах не надо, вызов openvpn
просто для примера.
Но как же управлять процессом, например, остановить именно запущенный? По PID. Почему просто не воспользоваться pkill
? Поясню на реальной задаче, например, на машине запускается несколько процессов openvpn
, обеспечивающих коннект к нескольким провайдерам или нескольким сетям — если сделать pkill openvpn
, положим сразу все процессы, а не конкретный. Значит, чтобы придушить конкретный процесс, надо получить конкретный PID.
На самом деле все придумали за нас, в bash есть системная переменная $!
, хранящая PID последнего запущенного в фоне процесса.
Чтобы в другом скрипте остановить процесс, запущенный в первом, например, мы должны написать два скрипта для старта и остановки некоторой программы, мы должны куда-то сохранить полученный PID.
Демоны в Linux обычно делают текстовый файл (т.н. PID-файл), куда записывают свой PID при запуске. В своем скрипте мы можем сделать также:
openvpn --config ~/vpn/myvpn.ovpn & #запуск процесса
VPNPID=$! #сохраняем PID в переменную
echo "VPN PID $VPNPID" #выводим PID на консоль
echo $VPNPID > /tmp/myvpn.pid #сохраняем в файл
Например, для остановки процесса:
VPNPID=`cat "/tmp/myvpn.pid"` # Читаем PID-файл
echo "Stopping: $VPNPID" # Сообщение пользователю
kill "$VPNPID" # Завершаем процесс с сохраненным PID
rm "$PIDFILE" # Удаляем файл с неактуальным PID
Поскольку в системе всем процессам выдается уникальный PID, вне зависимости, например, от network namespace, в котором запущен процесс, соответственно, алгоритм сработает и для процесса, запущенного в сетевом неймспейсе:
Запуск:
ip netns exec <имя_неймспейса> openvpn --config ~/vpn/myvpn.ovpn &
VPNPID=$!
echo "VPN PID $VPNPID"
echo $VPNPID > /myfiles/server/ddns/vpn.pid
Останов:
VPNPID=`cat "/tmp/myvpn.pid"` # Читаем PID-файл
echo "Stopping: $VPNPID" # Сообщение пользователю
kill "$VPNPID" # Завершаем процесс с сохраненным PID
rm "$PIDFILE" # Удаляем файл с неактуальным PID
ФАНФАРЫ!
tailbox
— интересный виджет программы dialog
, позволяющий видеть дополнения в текстовом файле в реальном времени, что делает его удобным для отображения логов
Если переданный программе лог не дополняется, то tailbox
просто отображает последние строки из файла (насколько хватает заданных размеров виджета)
Вызов виджета:
dialog --title "заголовок_окна" \ --exit-label "Надпись_на_кнопке_выхода" \ --tailbox "текстовый_файл" высота ширина
Например:
dialog --title "LOG" \ --exit-label "Close log window" \ --tailbox "/tmp/mylog.log" 24 70
Для демонстрации написал простой log viewer.
Использование:
logview путь_к_файлу
Вроде бы виджет простой, но при некоторой смекалке можно делать интересные вещи, например, вести лог сразу в трех местах — отображая его в --tailbox
‘е, одновременно отправляя изменения, происходящие в реальном времени на отдельный терминал, и сохраняя лог в файл (с перезаписью или дозаписью)
Прямая ссылка https://youtu.be/AARNx4SbYJg
Добиться этого можно, совместив dialog tailbox
с командой tee
(копия).
Написал демонстрационный скрипт:
Демонстрационный скрипт
В качестве источника логов, демо-скрипт вызывает в фоновом режиме другой скрипт tscript
, который выводит 10 случайных чисел на консоль и завершает работу:
#!/bin/bash SEC=1 CTR=10 echo "Test script, write to STDOUT random number after $SEC sec." while [ "$CTR" -ne 0 ];do let "CTR=CTR-1" printf '%x Number: %x\n' $CTR $RANDOM sleep $SEC done echo "Complete!"
Настройки скрипта для поиграться можно провести через внутренние переменные:
LOG_FILE="./test.log"
— если значение не задано, создается временный файл, который по завершению скрипта удаляется.
LOG_TTY="/dev/tty4"
— если значение не задано, лог в реалтайме не отправляется на дополнительный терминал
RMLOG=0
— 0
— по завершению скрипта лог не удаляется, 1
— удаляется.
LOG_APPEND=1
— 0
— при каждом запуске создается новый файл. 1
— добавление данных в лог, если он существует.
Поп, как король себя ведущий,
Корону все же получил,
Не внял начальства сообщенью,
И всем по-прежнему хамил.
Не поняло того начальство.
Пыталось как-то вразумить,
Не получилось, не взлетело.
Позвали лично на ковер.