• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

dario1133

Shell script linux

18 mensagens neste tópico

Boa noite

quero fazer um script que crie uma pasta "lixo" cujo conteúdo deve ser apagada as 23 horas , diariamente.

que me dizem deste código:

#!/bin/bash

mkdir Lixo

echo "Sao $(date +%H) horas"

num=$(date +%H)

if [ "$num" = "23" ];

then

cd Lixo

rm *.*

fi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é capaz de dar, desde que corras o script manualmente :|

O melhor seria acrescentares uma linha ao teu crontab. Corre (na consola):

crontab -e

E acrescenta esta linha:

0 23 * * * rm /DIRETORIA/Lixo/*.* > /dev/null

Não te esqueças de substituir DIRETORIA pelo caminho para a pasta Lixo.

Assim, o Cron (daemon que serve para agendar a execução de programas) vai correr esse comando todos os dias às 11 da noite.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois e eu não quero que corra manualmente, mas não percebi onde tenho de acrescentar a linha de código.

eu vou ter de executar o script na consola, pelo menos para me criar a pasta, mas nada mais. só as 23 h é que ele automaticamente devia remover  o conteúdo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

alguem me pode dar umas dicas pa por isto a correr automaticamente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

abre uma consola e escreve:

man crontab

ou então pergunta ao google. Basicamente ao escreveres crontab -e, és levado para a edição de um shellscript especial. Mas lê a documentação, está lá bem explicado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pessoal não consigo utilizar isso do crontab, podiam-me dar mais umas dicas?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O crontab é um serviço que executa tarefas periodicamente. Podes ver que tarefas estão a ser executadas pelo teu crontab ( há um por utilizador se não me engano ) com o comando:

crontab -l

Ora, para acrescentares uma tarefa ( que pode ser o teu script de remoção, ou um script em python, ou o executar de um binário ) ao crontab, tens que o editar.

crontab -e

Se for a primeira vez, ele vai-te pedir que editor de texto queres usar. Aconselho-te ( e ele também ) o nano. Aparece-te um ficheiro tipo isto:

# m h  dom mon dow  command

# indica um comentário, ou seja, a linha não é "executada".

m - minutos ( 0 - 59 )

h - horas ( 0 - 23 )

dom - dia do mês ( 1 - 31 )

mon - mês ( 1 - 12 ou jan, feb, mar, etc )

dow - dia da semana ( 0 - 6 ou sun, mon, etc  ) ( começa a domingo )

Crias o script hello.sh com o conteúdo:

echo 'hello!' >> ~/hello.txt

Este script cria-te um ficheiro hello.txt na home e quando é executado escreve uma linha nova a dizer hello!

Para o executares todos os minutos, com o cron, fazes:

# m h  dom mon dow  command

  *  *    *    *          *        /caminho/para/hello.sh

Ou seja, executas o script TODOS os minutos, TODAS a horas, TODOS os dias, TODOS os meses. É o que teres um asterisco em todo o lado quer dizer.

Imagina que o queres uma vez por hora:

# m h  dom mon dow  command

  0  *    *    *          *        /caminho/para/hello.sh

Assim defines que ele só se executa no primeiro minuto de cada hora.

Segue os links que te deram anteriormente para uma explicação mais detalhada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok eu entendi, mas eu tenho de fazer isso num script, e nao indo à consola escrever crontab -e.

eu encontrei um script parecido com o que quero mas é para guardar o conteudo do directorio home para um ficheiro de texto sendo executado todos os dias as 24h, é o seguinte:

#!/bin/bash

sudo cat 30 12 * * * ls -lR /home > backup_directoria.odt >> /etc/crontab

dialog --title 'Directoria home' --msgbox 'Conteudo do directorio "home" criada com sucesso num ficheiro do tipo .odt'

0 0

eu quero algo parecido mas que sirva para criar uma pasta 'lixo' e apagar o conteudo da pasta as 23h.

podem -me ajudar?

espero ter sido claro.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já te responderam a isso lá mais em cima. Lê este tópico com atenção. Tens TUDO o que precisas :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

os exemplos que me deram sao todos indo ao crontab e agendar, eu entendi mas eu cria que o script fizesse isso automaticamente, ter só o script quer atraves de algum comando agendasse o que quero.

não ha maneira de por o script a fazer aquilo que faria se fosse ao crontab acrescentar a linha:

0 23 * * * rm /DIRETORIA/Lixo/*.* > /dev/null

?????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

será que eu posso colocar o que quero agendar no meu script, tipo:

#!/bin/bash

# m h  dom mon dow  command

  *  23    *    *          *        /caminho/para/Lixo.sh

posso fazer isto no script?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o meu problema for: criar uma pasta 'lixo' e remover o seu conteúdo às 23 h diariamente o seguinte script resolve-me a questao?

#!/bin/bash

mk dir Lixo

# m h  dom mon dow  command

0 23 * * * rm /Desktop/Lixo/*.* > /dev/null

ObrigAdo

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Evita Triple-Posts :)

Tu o mais que podes fazer é ter um script que te cria a directoria e depois faz upload do ficheiro para o crontab. O crontab, como já devias ter lido da documentação toda que aqui se pôs, pode ser editado ou pode ler ficheiros. Por isso, se queres mesmo fazer isso automaticamente (o que não entendo uma razão para tal), fazes um script mais ou menos como o aí em cima mas que passe argumentos directamente ao crontab. Coisa que não sei fazer. O mais que podes fazer é fazer algo tipo:

echo '* 23 * * * * blabla' > temp_cron.txt
crontab temp_cron.txt
rm temp_cron.txt

Isto deve funcionar como queres..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa pelos posts.

Pois eu sei que pode ler ficheiros, só não sei é como,  já andei à procura e nada, aparece só exemplos como os que me deram aqui, acrescentando uma linha de código no crontab. Quero que faça automaticamente porque é para entregar e não para eu usar, como tal convém que corra automaticamente.

#!/bin/bash

mk dir Lixo

echo '* 23 * * * * rm /Desktop/Lixo/*.*' > temp_cron.txt

crontab temp_cron.txt

rm temp_cron.txt

Assim está bem para aquilo que pretendo??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não vou ser eu que vou editar o teu último post, copiar o conteúdo, colá-lo no de cima. E depois apagar o 2o. Vais tu fazê-lo ok? :)

Sim, deve ser isso que tu queres. Experimenta. Porque não fazes simplesmente o ficheiro do crontab e envias juntamente com o programa? E o script só o teria que chamar. É isso que faço nas minhas coisas. Algum problema no cron, só se tem q mudar o ficheiro e não andar a ver o script.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa Noite

Bem mudei de ideias e prefiro executar como no 1º exemplo que me deram.

Fiz um script, o seguinte para me criar a minha pasta:

#!/bin/bash

mkdir /home/ubuntu/Documentos/Lixo/ 

a pasta foi criada nos documentos, e acrescentei-lhe um ficheiro.txt

depois fui à consola fiz crontab -e, e acrescentei a seguinte linha:

10 23 * * * rm /home/ubuntu/Documentos/Lixo/*.* > /dev/null

fiz ctrl O, para guardar, depois enter, depois ctrl X para sair.

depois na consola coloquei crontab -l, e mostrou a linha que acrescentei.

mas não funcionou, às 23:10 devia apagar o ficheiro que guardei na pasta lixo, mas nao fez nada.

Podem-me detectar o erro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vê o ficheiro de log a ver se tens algum erro.

E podes também experimentar correr o comando manualmente, a ver se não dá nenhum problema de permissões ou assim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora