Ведение журнала для каждого запуска скрипта bash
У меня есть скрипт bash, который выполняет копирование данных и некоторые преобразования. Сценарий может работать в течение нескольких минут в зависимости от размера файла. Тем временем другой процесс может запустить этот скрипт для копирования своих файлов.
Я хочу вести индивидуальный журнал для каждого запуска скрипта. Является ли это возможным?
2 ответа
Вот пример сценария (я создал для примера), журналы которого будут записываться в файл журнала на основе даты и времени при каждом запуске:
cat check_script.ksh
CURRENT_TIME=$(date +%d-%m-%Y-%H:%M-%S)
echo "Running copy command now..." > "$CURRENT_TIME.txt"
## cp command here......
echo "Running another comand now....." >> "$CURRENT_TIME.txt"
## Bla bla bla
echo "Scrpit is completed..." >> "$CURRENT_TIME.txt"
РЕДАКТИРОВАТЬ: Также, чтобы проверить, запущен ли ваш сценарий или нет, давайте запустим старую школьную логику для создания файла Watch Dog (типа файла блокировки) при запуске сценария (если он еще не создан, сначала установите флажок, если он есть). НЕ создан или представлен, затем создайте его или выйдите из программы, учитывая, что она запущена), и каждый раз, когда скрипт завершается (после вашей последней успешной команды), вы можете удалить его тогда, если ваш следующий прогон приходит и видит, что файл есть, он должен выйти из сценарий тогда.
Вы можете записать свои журналы в файл, имя которого основано на:
- текущая дата в момент запуска скрипта
- ток
PID
экземпляра вашей программы
Этого должно быть достаточно, чтобы убедиться, что каждый экземпляр вашей программы имеет свой собственный файл журнала.
Вот небольшой пример:
pid=$(echo $$) # Current instance PID
date=$(date +%s) # Seconds since Epoch
logfile="myscript.$date.$pid.log"
echo "I'm a log" > $logfile
echo "I'm another log" >> $logfile
Если вы хотите включить имя процесса, который запустил ваш скрипт, вы можете передать его в качестве аргумента вашему скрипту, например так:
myscript.sh
parent="$1"
pid=$(echo $$)
date=$(date +%s)
logfile="myscript.$date.$pid.$parent.log"
echo "I'm a log" > $logfile
echo "I'm another log" >> $logfile
Вы бы назвали этот скрипт так:
sh myscript.sh parent_script_name
И это создаст файл, похожий на этот:
myscript.1518358314.85866.parent_script_name.log