1

Как бы cron справился с заданием, которое выполняет несколько команд.

В качестве примера у меня есть работа cron, которая выглядит следующим образом. Который становится очень трудно читать.

10 0 * * * firstscript.sh > first.log; secondscript.sh >> second.log; thirdscript.sh >> third.log 2>&1;

Все три сценария выполняются одновременно. В моем окружении у нас есть 6 команд, выполняемых последовательно.

Почему бы не написать ту же самую работу тремя отдельными работами.

10 0 * * * firstscript.sh > first.log;  
10 0 * * * secondscript.sh >> second.log; 
10 0 * * * thirdscript.sh >> third.log 2>&1;

Я унаследовал эти задания и пытаюсь лучше понять, почему они выполняются в виде нескольких команд вместо 3 отдельных заданий.

  • Первая причина, по которой я могу думать, что между сценариями могут быть зависимости. Таким образом, они должны работать в этом конкретном порядке. Так что secondscript.sh зависит от завершения firestscript.sh .

  • Вторая причина состоит в том, что эти сценарии / команды являются дорогостоящими для выполнения, и сервер работает лучше, когда они работают последовательно. Потенциальная блокировка файла и запись нескольких команд в один и тот же файл также могут вызвать проблемы.

Если первый скрипт завершается с ошибкой, выполняются ли команды, следующие за ним?
Если зависимости являются проблемой, есть ли способ разделить задание на несколько заданий и при этом удовлетворить зависимости?
Есть ли у cron такая возможность?

1 ответ1

2

Что касается вашего первого пункта, ни ваш, ни ваш crontabs не обеспечивают надлежащего разрешения зависимостей, потому что каждая команда выполняется независимо от проблемы предыдущей. Для этого вы хотите использовать оператор && между вашими командами. Это также отвечает на первый из вас последние 3 вопроса.

Ваш второй пункт может быть действительным, в зависимости от контекста. Хотя я подозреваю, что причина написания всех команд в одну строку в том, что проще просто добавить что-то в конце, чем добавить новую строку с новым расписанием. Одной из причин может быть также обслуживание: если вы хотите изменить расписание для всех своих команд, проще изменить только одну строку.

На второй из ваших последних 3 вопросов ответ - да, но это может быть сложно. Вы должны вручную определить, какая задача может безопасно выполняться одновременно с другой, и настроить механизм, позволяющий вашему следующему набору задач знать, были ли первые выполнены успешно или нет. Cron не имеет ничего встроенного, чтобы помочь вам там.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .