Estou procurando uma sugestão de estratégia. Eu sou muito novo no script shell do Linux. Apenas aprendendo tcsh não mais que um mês. Eu preciso de um script para detectar automaticamente quando é que os arquivos de resultados são feitos copiados de volta de um servidor remoto para uma pasta em uma máquina remota, em seguida, inicie os arquivos scp de volta para minha estação de trabalho. Eu não sei de antemão quando o trabalho será concluído, então a pasta não poderá ter arquivos de resultados por um longo tempo. Eu também não sei quando será o último arquivo de resultado copiado de volta do servidor remoto para a pasta (e, portanto, pode iniciar o scp).
Eu tentei crontab. Trabalho bem quando eu acho que corretamente, na maioria das vezes apenas decepcionante. Então eu tentei escrever um roteiro e eu tenho agora. Eu pretendo produzir um script que sirva a mim e aos meus colegas também. Para usar o script, o usuário precisa primeiro fazer login na máquina remota manualmente. Então, só execute o script na máquina remota. O script primeiro pede ao usuário para inserir seu nome de máquina local e diretório onde deseja salvar os arquivos de resultado. Em seguida, o script fará um loop para testar quando o número total de arquivos é alterado. Quando é detectado, o que significa que o primeiro arquivo de resultado está sendo copiado do servidor remoto, ele faz um loop novamente para detectar quando o tamanho total dos arquivos na pasta pára de ser alterado, o que significa que o último arquivo de resultado é copiado para o pasta. Depois disso, ele executa scp para enviar todos os arquivos de resultados para a estação de trabalho do usuário, no diretório especificado inicialmente.
O script funciona bem, mas eu desejo que o script seja executado em segundo plano e ainda seja executado sozinho, mesmo se o usuário fizer logout da máquina remota e fechar o terminal. E também gostaria de deixar o usuário apenas digitar um comando simples no terminal para iniciar o script, algo como um simples
./script.tcsh
Eu tentei executar o script por comando
./script.tcsh &
mas falha, porque o processo de segundo plano não aceita a entrada do usuário.
Google e encontrou algo chamado disown, mas o comando não foi encontrado. Aparentemente, a máquina remota e minha máquina não suportam este comando.
Tentei modificar o script para primeiro aceitar a entrada do usuário e, em seguida, tentar usar
cat > temp_script.tcsh << EOF
{rest of my script}
EOF
e depois uma linha de
./temp_script.tcsh &
para tentar criar outro arquivo de script e usar o primeiro script para iniciar o segundo script em segundo plano. Também falha, porque o cat não trata $ variable como um texto literal, ele o substitui por valores. Eu tenho um loop foreach i (1 2), e o comando cat apenas continua relatando erro (valor ausente da variável i, que é apenas um contador na sintaxe do loop foreach).
Estou fora de ideia no momento. Alguém pode me esclarecer com alguma estratégia que eu possa experimentar? O objetivo é usar apenas 1 arquivo de script, e solicitar ao usuário 2 entradas (nome da máquina e diretório para salvar), depois não mais interação com o usuário ou espera, e capaz de executar até mesmo fechar o terminal.
Nota: Eu não preciso de senha para acessar a máquina remota e voltar.