Eu tenho um comando em um script npm que conecta o SSH em um servidor de compilação remota e executa um script Bash. O script configura um arquivo de trava e uma chamada trap
para excluir o arquivo de trava quando o script sai.
Estou cancelando a operação com ctrl + C nos dois casos.
LOCKFILEPATH="/tmp/env_app.lock"
# cleanup function just deletes $LOCKFILEPATH
function mutex() {
if [ -f "$LOCKFILEPATH" ]; then
echo -e "\n\n${redtext}Build already in progress! Exiting.${resettext}\n\n";
exit 1;
else
touch $LOCKFILEPATH;
trap cleanup EXIT;
fi
}
Isso funciona bem quando você primeiro SSH no host para executá-lo, mas a armadilha não está funcionando quando você envia o comando através de SSH com
ssh hostname command
Eu tentei adicionar ao comando trap para executar mais sinais, mas estes não parecem funcionar:
trap cleanup EXIT SIGHUP SIGKILL SIGTERM SIGINT
O que devo fazer aqui?
Também configurei um script mais simples e ele pareceu funcionar bem ao executá-lo manualmente por SSH. Talvez tenha adicionado camadas quando estou usando um script npm? O script npm é:
"deploy": "ssh HOSTNAME ''deploy-script $(git rev-parse --abbrev-ref HEAD) stage $npm_package_config_deploy_target yes''",
que apenas verifica o nome da ramificação atual e usa isso para implantar no host de compilação. O mesmo que
"deploy": "ssh HOSTNAME ''deploy-script CURRENTBRANCH stage APPNAME''",
ATUALIZAÇÃO: Adicionar uma força tty -t
ao script npm parece tê-lo corrigido. Confuso desde que eu não precisei disso para o caso de script simples. Talvez eu esteja gerando muitos subprocessos no script grande (muito para colar aqui sem redigir um monte), então é necessário um tty para acionar a armadilha de limpeza.
"deploy": "ssh -t HOSTNAME ''deploy-script CURRENTBRANCH stage APPNAME''",