У меня есть файл удара, который выполняет процесс на серии недавно загруженных файлов, каждый день, общее время выполнения для всей обработки является несколькими часами.
Я хочу выполнить конкретную команду 24 удара спустя часы после того, как процесс был выполнен на конкретном файле.
Я попытался использовать at
для этого однако я не думаю, что можно использовать в выполнить команду удара т.е.:
at now +24 hours gsutil rm gs://$google_cloud_storage_location/$processed_file
И я также не могу заставить это запускать скрипт удара с аргументами.
at now +24 hours -f example_script.bash $google_cloud_storage_location/$processed_file
Что корректный путь состоит в том, чтобы пойти о планировании этих задач? Сделайте мне просто нужен совершенно другой инструмент, или я пропускающий путь с at
?
Сценарий удара в качестве примера:
for file in list_of_files; do
#do some processing
....
#then delete the file
at now +24 hours gsutil rm gs://file
done
Если Вы хотите, чтобы Ваши переменные были заменены во время установки задания, можно выполнить выполнение простой команды удара с at
путем простой передачи по каналу команды к at
с эхом. Для Вашего первого примера синтаксис был бы
echo "gsutil rm gs://$google_cloud_storage_location/$processed_file" | at now +24 hours
Для второго примера, синтаксис мог быть
echo "/path/to/example_script.bash $google_cloud_storage_location/$processed_file" | at now +24 hours
, Если подстановка переменных должна быть выполнена во время задания, это немного более хитро. Необходимо будет создать сценарий, который работает, когда задание должно быть сделано, заняв место в свое время. Это может быть сделано с помощью команды исключительно (например, из сценария) путем выполнения
echo -e '#!/bin/bash' > /path/to/script
Затем
echo '<your command here>' >> /path/to/script
Затем синтаксис для эти at
, команда
at now +24 hours -f /path/to/script
, Конечно, +24 hours
, часть должна быть скорректирована к надлежащей продолжительности.
С тех пор at
чтения управляет от stdin или из файла:
for file in list_of_files; do
#do some processing
....
#then delete the file
at now +24 hours <<EOF
gsutil rm gs://"$file"
EOF
done
Используя heredocs для обеспечения команд работал бы, так как переменные расширены в heredocs, если heredoc маркер (EOF
, здесь) не заключается в кавычки.