Как в сценарии оболочки запланировать запуск функции в указанное время?

Команда

ps -p$PPID | awk '{print $4}'

вернет две строки, причем вторая строка — это именно тот эмулятор терминала, который вы используете. Надеюсь, я помог =)

1
03.06.2020, 00:45
1 ответ

Если мои расчеты верны:

sleep $(( 86400 + 5*3600 - $(date +%s) % 86400 ))
echo "it's 5 in the morning (UTC)"

$(date +%s)= текущее время в секундах с начала 1970 года (в формате UTC );
$(date +%s) % 86400= часть текущего дня, то есть секунды с прошлой полуночи (UTC)
86400 + 5*3600= секунды с прошлой полуночи до 5 утра завтрашнего дня
86400 + 5*3600 - $(date +%s) % 86400= секунды с сегодняшнего дня до 5 утра завтрашнего дня (UTC)

Конечно, это прерывается, если текущее время находится между полуночью UTC и целевым временем; и вам нужно настроить целевое время для местного часового пояса...

Возможно, проще было бы:

sleep $(( $(date -d '05:00 tomorrow' +%s) - $(date +%s) ))

Это также пропускает дополнительные 24 часа, если уже за полночь, но, по крайней мере, учитывает местное время.

because the password should be persisted in a file, which is less secure than typing it once.

В зависимости от того, от чего вы хотите защититься, вы можете сбросить пароль в некоторых случаях. в файловой системе памяти -, т.е. tmpfs, чтобы он не попадал на диск. В системе systemd /runдолжно быть tmpfs, но лучше убедиться.

Кроме того, в зависимости от того, как вы выполняете резервное копирование, вы можете организовать, например,. ключ SSH, который можно использовать только для отправки резервных копий на удаленный сервер (, но не для их чтения ). Или используйте шифрование с открытым ключом -, чтобы вам нужно было иметь только общедоступную часть резервной копии на хосте, записывающем резервные копии...

1
18.03.2021, 23:30

Теги

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