Кто-то просил полную версию трека из мануала по 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 — добавление данных в лог, если он существует.
Поп, как король себя ведущий,
Корону все же получил,
Не внял начальства сообщенью,
И всем по-прежнему хамил.
Не поняло того начальство.
Пыталось как-то вразумить,
Не получилось, не взлетело.
Позвали лично на ковер.