Executa uma lista de comandos com pontos de verificação?

1

Eu tenho um script que faz um procedimento complicado de desligamento e restauração. Ele possui alguns comandos de execução longa executados nele. Alguns demoram cerca de dez minutos, alguns são mais rápidos.

Existe algum software que me permitirá colocar todos esses comandos em um arquivo e executá-los com pontos de verificação. Por exemplo, ele permitirá que eu os execute um por um e lembre qual foi o último executado, ou apenas execute todos eles e se um deles quebrar, poderei tentar novamente a partir desse ponto.

    
por Petko M 30.01.2017 / 19:18

1 resposta

1

Depois de executar cada comando de longa duração, você precisa lembrar que ele foi executado. A maneira de lembrar que algo aconteceu é armazenar as informações em um arquivo.

Se o efeito de um desses comandos for criar um arquivo, você poderá testar a presença desse arquivo. Há algumas coisas para se ter cuidado:

  • Se o comando criar um arquivo de saída e o preencher em vários estágios, e falhar no meio, você terminará com um arquivo parcial. A solução é fazer o comando gravar em um arquivo temporário e renomear o arquivo temporário para o nome final depois que o comando for concluído com êxito.
  • Se o arquivo de saída já existia antes do comando ser executado, você precisa de uma maneira de saber se o arquivo de saída está atualizado. Isso geralmente é resolvido comparando-se o horário de modificação dos arquivos de entrada e do arquivo de saída: se o arquivo de saída for mais recente que os arquivos de entrada, isso indica que ele foi regenerado.

Tudo isso é o trabalho básico das ferramentas de automação de criação . Você pode usar a ferramenta tradicional, make . É construído em torno do conceito de “se o arquivo B é construído a partir do arquivo A, e A é mais recente que B ou B não existe, então execute o comando para gerar B de A”. A sintaxe para isso é

B: A
        command-to-generate-B-from-A

onde a segunda linha começa com um caractere de tabulação, não com espaços.

Se o comando não criar seu arquivo de saída atomicamente, faça-o gravar em um arquivo temporário:

B: A
        mycommand <A >B.tmp
        mv B.tmp B

Note que se mycommand falhar, make não executará o segundo comando, então B não será criado.

Para criar B, execute o comando make B . Se B já existir e for mais recente que A, o make não executará mycommand novamente.

Faça regras de cadeias automaticamente. Se você tem uma regra para construir B de A e uma regra para construir C de B, e somente A existe, então make C constrói automaticamente B e C.

Se não houver nenhum arquivo que mostre que o comando foi executado, você pode criar um arquivo vazio apenas para lembrar.

command1.timestamp:
        command1
        touch command1.timestamp
command2.timestamp:
        command2
        touch command2.timestamp

A execução de make command2.timestamp não faz nada se command2.timestamp já existir. Caso contrário, ele primeiro executará command1 , a menos que command1.timestamp já exista e, em seguida, execute command2 .

    
por 31.01.2017 / 01:02