Как выполнить команду удара с аргументами в запланированное время

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

Я хочу выполнить конкретную команду 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
0
задан 19 December 2016 в 17:56

2 ответа

Если Вы хотите, чтобы Ваши переменные были заменены во время установки задания, можно выполнить выполнение простой команды удара с 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, часть должна быть скорректирована к надлежащей продолжительности.

2
ответ дан 7 November 2019 в 07:17

С тех пор 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, здесь) не заключается в кавычки.

1
ответ дан 7 November 2019 в 07:17

Другие вопросы по тегам:

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