Порядок выполнения с несколькими командами

Порядок выполнения с несколькими командами

Я относительно новичок в Linux и работаю над CronTab для запланированного резервного копирования. Я понял, как выполнять несколько последовательных заданий с помощью ;и &&, но я не уверен, как зависимость влияет на последовательность.

Моя задача cron выглядит так:

# Every day at 0:00 (reboot server and do the hourly backup procedure).
0 0 * * * sh shutdown.sh && sh backup.sh ; sh nas.sh ; sh ftp.sh ; sh startup.sh        

Я хочу, чтобы я запустил shutdown.sh и продолжил последовательность, если она успешна, но отменил ее, если она не удалась. Я боюсь, что он только пропустит, sh backup.shно затем продолжит последовательность.

Будет ли это работать так, как задумано? Если нет, возможно ли что-то подобное shutdown && (backup ; nas ; ftp ; startup)?

решение1

Почему бы вам не протестировать это с помощью нескольких фиктивных команд, которые, как вы знаете, сработают или нет?

$ ls foo && echo ok1 ; echo ok2
ls: cannot access foo: No such file or directory
ok2

$ ls foo && (echo ok1 ; echo ok2)
ls: cannot access foo: No such file or directory

Так что, похоже, ваша интуиция была верна, и вам нужна вторая структура.


Какпредложенныйкmikeserv, для тестирования в целом, вы можете использовать true(или :) и false, вместо lsнесуществующего файла. Следовательно,

$ false && echo ok1 ; echo ok2
ok2

$ false && (echo ok1 ; echo ok2)

решение2

если shutdown.sh действительно перезагружает ваш сервер, я не думаю, что другие команды будут выполнены?? ответ может быть удален, но вы можете его прочитать, поэтому вот несколько подсказок: поместите скрипты в отдельную папку и вызывайте их с полным путем, cron может запускаться в другой папке. сделать их исполняемыми и вызывать их напрямую без sh тоже неплохо. поместить всю логику в дополнительный скрипт с if-else тоже будет хорошим кодом. если вы беспокоитесь о том, что sh будет использоваться как оболочка, используйте shebang.

Связанный контент