Я относительно новичок в 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.