Sou relativamente novo no Linux e estou trabalhando em um CronTab para backups agendados. Eu descobri como fazer vários trabalhos sequenciais com ;
e &&
, mas não tenho certeza de como a dependência afeta a sequência.
Meu cron job é assim:
# 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
O que eu quero que aconteça é executar shutdown.sh e continuar a sequência se for bem-sucedida, mas cancelá-la se falhar. Meu medo é que ele apenas pule sh backup.sh
, mas continue a sequência.
Funcionará como pretendido? Se não, algo assim seria shutdown && (backup ; nas ; ftp ; startup)
possível?
Responder1
Por que você não testa com alguns comandos fictícios que você sabe que funcionarão ou falharão?
$ 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
Parece que sua intuição estava correta e você precisa da segunda estrutura.
Comosugeridopormikeserv, para testes em geral, você pode usar true
(ou :
) e false
, em vez ls
de um arquivo inexistente. Por isso,
$ false && echo ok1 ; echo ok2
ok2
$ false && (echo ok1 ; echo ok2)
Responder2
se shutdown.sh realmente reinicia seu servidor, não acho que os outros comandos serão executados? A resposta pode ser excluída, mas você pode lê-la, então aqui estão apenas algumas dicas: coloque os scripts em uma pasta própria e chame-os com o caminho completo, o cron pode ser executado em uma pasta diferente. torná-los executáveis e chamá-los diretamente sem sh também é bom. colocar toda a lógica em um script extra com um if-else também é uma boa codificação. se você se preocupa com o sh sendo usado como shell, use um shebang.