2013-10-07 4 views
2

У меня есть сценарий bash, который я хочу, чтобы он запускался как демон, когда он проверяет состояние, некоторое время работает и спит, и цикл повторяется.Настройка журнала для сценария bash

I demonize the script as : nohup myScript.sh & 

Как я могу настроить протоколирование для того же сценария, как это имеет те же эхо-команды, которые печатает некоторые заявления и как убедиться, что у меня есть идентификатор процесса скрипта, если я хочу, чтобы убить его позже.

Может кто-нибудь подскажет, как я могу достичь того же

ответ

1

Если посмотреть на O переназначения главы I/в Advanced Bash-Scripting Guide, то вы увидите, что вы можете перенаправить вывод в файл, делать что-то подобное, в верхняя часть вашего сценария:

exec 2>&1 
exec 1>>out.log 

Первая строка перенаправляет STDERR на стандартный вывод, а вторая строка добавляет стандартный вывод в out.log. Если вы это сделаете, вы можете использовать эхо для записи определенных сообщений в лог-файл, а вывод всех команд, которые вы не отключили, будет также записываться в файл журнала.

У Bash есть много специальных переменных, вы можете получить их обзор в Special Shell Variables reference card. Один из них - $$, в котором хранятся сценарии PID. Чтобы сохранить это, вы можете сделать следующее:

echo $$ > ${0}.pid 

Это создаст имя файла <file name of script>.pid, содержащий PID сценария.

+1

Вероятно, 'echo $$> $ {0} .pid' ->' echo $$>/подходящий/путь/$ (basename $ 0) .pid' был бы полезен. Но это зависит от удобства пользователя. – anishsane

+0

Итак, как мне запланировать мой скрипт, было бы так: 'nohup myScript.sh> /script.log &' вы можете объяснить в шагах. –

+0

Спасибо, что он работает нормально. –

1

Поместите следующую строку в начало вашего скрипта. Это экономит ИДП для последующего использования:

echo $$ > myScript.pid 

Начните свой сценарий захвата выхода для входа (от страницы человека поЬира примера):

nohup myScript.sh > myScript.log & 

Убить сценарий позже:

kill -9 `cat myScript.pid` 

Простой пример myScript.sh:

#!/bin/bash 
echo $$ > myScript.pid 
while :; do echo "Hello"; sleep 1; done 
+0

Я не получил, не могли бы вы рассказать. с шагами, которые мне нужно сделать –

+0

Это шаги, теперь в последовательном порядке. – svante

+0

Спасибо, что он работает нормально. –

Смежные вопросы