Por que minha armadilha não está imprimindo nenhuma mensagem de log?

3

O que estou fazendo é

trap 'rm -f /path/of/file/fileName.running; echo "TRAPPED & READY";' 1 2 9 15 >> trap.log

Eu não recebi nada em log & o arquivo que deveria ter sido deletado ainda existe, não tenho certeza de qual sinal poderia estar parando o script enquanto ele está rodando, já que estou apenas matando os servidores que estão sendo usados pelo script.

NB: Meu trabalho Cron-Scheduled não será executado se esse arquivo estiver presente & Eu não acho que tenha perdido nenhum sinal possível. onde estou errado?

    
por Keyshov Borate 12.08.2014 / 10:58

2 respostas

3

Parte do seu problema é que você tem o >> trap.log fora do comando (quoted) arg, então tudo o que você está recebendo no arquivo trap.log é a saída do comando trap - o que não é nada. Não tenho certeza do que você quer dizer com "TRAPPED & PRONTO "quando o seu script está terminando, mas parece que o que você quer dizer é

trap 'rm -f filename; echo "message" >> trap.log' sigspec

E eu concordo com Karlo: se você é "Apenas matando os servidores que estão sendo usados pelo script" então o script provavelmente está saindo (ao invés de ser morto por um sinal) e você deve usar o EXIT (ou, equivalentemente, 0 ) sigspec (possivelmente além de 1 , 2 e 15 ).

P.S. Você não precisa de um ponto-e-vírgula ( ; ) no final do comando trap .

    
por 12.08.2014 / 19:16
2

Use EXIT em vez dos números de sinal.

O script abaixo funciona para mim. Eu uso as constantes.

> cat test.sh
#!/bin/bash

trap 'echo trap' EXIT

echo 'Program running'
sleep 1

> ./test.sh
Program running
trap

Do bash manpage:

If a sigspec is EXIT (0) the command arg is executed on exit from the shell. If a sigspec is DEBUG, the command arg is executed before every simple command, for command, case command, select command, every arithmetic for command, and before the first command executes in a shell function (see SHELL GRAMMAR above). Refer to the description of the extdebug option to the shopt builtin for details of its effect on the DEBUG trap. If a sigspec is RETURN, the command arg is executed each time a shell function or a script executed with the . or source builtins finishes executing.

    
por 12.08.2014 / 11:21