Script Unix Shell para excluir todos os rastros de si mesmo após a execução através de crontab

0

Minha pergunta tem 2 partes. Ajuda com ambas as partes é muito apreciada.

DADO INFO:  - Vamos supor que existem 2 pastas, pasta A e pasta B.  - A pasta A contém muitos arquivos.  - A pasta B contém o script Shell (code.sh)

PARTE A: O script code.sh tem que deletar todos os arquivos da pasta A e depois também deletar a pasta B incluindo o script code.sh

PARTE B: Também isto tem que ser agendado via crontab em algum momento particular que em si não é um problema. Mas, depois que o script tiver excluído o conteúdo da Pasta A, ele deverá remover sua entrada do crontab e, em seguida, continuar com a exclusão da Pasta B, conforme mencionado na PARTE A.

O acima é possível? Se assim for, alguém pode me dizer como ou pelo menos me apontar na direção certa. Eu sou novo no UNIX, então qualquer ajuda seria muito apreciada.

Nota: Em todo o processo, apenas agendar o script (code.sh) no crontab deve ser manual.

    
por rapidclock 21.10.2014 / 13:07

2 respostas

1

Se este script for executado como root ... então a remoção da entrada do crontab pode ser feita removendo sua linha crontab de / var / spool / cron / root. (Isso é o que crontab -l e crontab -e use).

No final dos seus comandos de exclusão, adicione a seguinte linha (substituindo {padrão} pelo seu nome de script):

sed -i '/{pattern}/d' /var/spool/cron/root

Então, se a sua entrada em crontab que executa code.sh se parece com

0 21 * * * /etc/cron.daily/code.sh

O comando seria:

sed -i '/code.sh/d' /var/spool/cron/root

Isto irá remover a linha contendo "code.sh" do seu arquivo crontab raiz.

Você pode adicionar a linha acima ao final do seu script para que ambos os arquivos sejam excluídos e a entrada seja removida do crontab. Como o @Barmar afirmou, você pode simplesmente deletar ambas as pastas ao longo do tempo.

Sim, esta é uma pergunta muito antiga, mas a pergunta direta sobre a remoção de crontab especificamente ainda precisava de uma resposta.

    
por 03.05.2016 / 17:10
0

Desde que o script tenha permissão para excluir os arquivos, não há absolutamente nenhum problema com isso. Em sistemas baseados em unix, não há restrições para um script alterar ou excluir seu arquivo de origem. A estrutura do sistema de arquivos é manipulada para que o armazenamento físico associado ao arquivo seja liberado apenas quando todos os processos fecharem o arquivo (após a exclusão, o arquivo não estará mais visível na estrutura do diretório, mas o processo que ainda contém o inode os dados do arquivo podem acessá-lo: somente quando ninguém se lembra do inode, o arquivo é perdido).

A menos que o intérprete que esteja lendo o script queira fechar e reabrir o arquivo. Bash não deveria ser um problema.

Além disso, isso parece um trabalho único. Não use crontab . Use at ou mesmo apenas sleep amount && ./script , que normalmente é a maneira rápida e suja de fazer isso (mas não funciona se a máquina for reinicializada ou o terminal estiver fechado).

    
por 06.01.2015 / 09:33