Как записать в лог cronjob?

Страница руководства объясняет использование довольно ясно:

--locate-keys
    Locate the keys given as arguments.  This command  basically  uses  the  same
    algorithm  as  used when locating keys for encryption or signing and may thus
    be used to see what keys gpg might use.  In particular  external  methods  as
    defined  by  --auto-key-locate may be used to locate a key.  Only public keys
    are listed.

Другими словами, --locate-keys можно использовать для проверки того, какой ключ будет использоваться для данного идентификатора. В отличие от --list-keys, он перечисляет только неаннулированные и неистекшие ключи: все это ключи, которые GnuPG будет учитывать, например, при шифровании сообщений. Рассматривайте это как --list-keys с семантикой поиска ключа --recipient при использовании с --encrypt.

Это очень похоже на «отображение ключа в локальной связке ключей», но с некоторыми дополнительными ограничениями.

1
04.01.2017, 13:01
1 ответ

Во-первых, чтобы скрипт отображал имя машины, две вещи:
а) Измените способ удаленного выполнения скрипта, чтобы запустить его напрямую. на удаленном хосте. Для этого необходимо скопировать сценарий на удаленный компьютер. Мне нравится хранить мои личные служебные сценарии в каталоге с именем «do» в моем домашнем каталоге, поэтому я бы использовал его как
~ / do / ShutdownUPTIME.sh

Теперь измените строку, которая читает
ssh admusr @ "$ {n}" 'sudo bash -s' <./documents/ShutdownUPTIME.sh

к этому:
ssh admusr @ "$ {n}" sudo do / ShutdownUPTIME.sh $ n

Обычно вы передаете ему имя машины $ n в качестве параметра.

b) Затем измените сценарий ShutdownUPTIME.sh на использование переданного аргумента. Если у вас Mac , введите $ MACNAME .В начале сценария добавьте строку
MACNAME = $ 1

Теперь сценарий будет выглядеть следующим образом:

#!/bin/bash
MACNAME=$1
BOOT_TIME=$(sysctl -n kern.boottime | sed -e 's/.* sec = \([0-9]*\).*/\1/')
CURR_TIME=$(date +%s)
MAX_UPDAYS=1 #Days

DAYS_UP=$(( ( $CURR_TIME - $BOOT_TIME) / 86400 ))
if [ $DAYS_UP -ge ${MAX_UPDAYS} ];then
    echo Notice: $MACNAME is going to shutdown 
    sudo shutdown -h now
else
        echo Info: No shutdown for $MACNAME needed
fi

Я также добавил «Уведомление» и «Информация» к командам вывода, чтобы придать им некоторый уровень важности. - это помогает при последующей фильтрации журналов.

В качестве бонуса заставьте скрипт обрабатывать ситуацию, когда вы не указали имя Mac, указав значение по умолчанию. Например, присвоение значения MACNAME становится

MACNAME = $ {1: - $ (hostname)}

О ведении журнала: Cron отправит вам электронное письмо с выводом каждого задания, но это может быть очень неудобно. Самое простое решение - перенаправить вывод команд в локальный файл журнала.

Для этого просто добавьте перенаправление в строку «готово» цикла, чтобы он стал

готовым | tee -a $ LOGFILE 2> & 1

И это, конечно же, требует, чтобы вы установили имя в переменной LOGFILE ранее в скрипте, поэтому добавьте такую ​​строку в начале:
LOGFILE = / var / log /refreshing.log
( Примечание: укажите путь к файлу, в который у вас есть разрешение на запись)

Кроме того, вы можете регулярно добавлять метку времени в этот журнал, поэтому непосредственно перед циклом добавьте строку
echo Выполняется обновление в $ (дата) | tee -a $ LOGILFE

Запись в журнал вывода команды cron означает, что запись в журнал происходит только тогда, когда ваш скрипт выполняется из cron. Поэтому предпочтительнее заставить скрипт управлять своим собственным журналом. Я изменил сценарий, чтобы использовать tee вместо перенаправления, так что когда вы запускаете его в командной строке, вы все еще можете видеть результат.

0
28.01.2020, 01:04

Теги

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