Ordem de execução com vários comandos

Ordem de execução com vários comandos

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 lsde 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.

informação relacionada