Tem certeza de que a permissão é 733, ou seja, o grupo e os demais usuários podem gravar e executar, mas não ler? Esse diretório é um tipo de dropbox (i.e. qualquer um escreve, mas ninguém vê as coisas escritas por outrem, nem o conteúdo do próprio diretório)?
Os comandos que você vai usar são while, true (ou “:”) e sleep.
3. Re: Shell Script com loop infinito
luizsouza99usa Linux Mint
Post recolhido
Enviado em 24/06/2014 - 18:03h
for (( loop=1;loop>0;loop++));do
sleep 10 # tempo que ele segura o loop, 10 segundos
#código aqui dentro
done
4. Re: Shell Script com loop infinito
rai3mbusa Outra
Post recolhido
Enviado em 24/06/2014 - 21:59h
luizsouza99 escreveu:
for (( loop=1;loop>0;loop++));do
sleep 10 # tempo que ele segura o loop, 10 segundos
#código aqui dentro
done
Cuidado ai, tem uma variável que está sendo incrementada infinitamente, vai usar memória e vai crescer até não ser mais possíve.
poderia ser feito sem variável com:
while :
do
#codigo a ser executado
sleep 10
done
5. Re: Shell Script com loop infinito
luizsouza99usa Linux Mint
Post recolhido
Enviado em 25/06/2014 - 01:56h
eu sempre uso no pc dessa forma,
eu não sabia que comia memoria, aqui é tranquilo, mas se formos pensar a nível de servidor vc tem razão, deve dar maior dor de cabeça
6. Re: Shell Script com loop infinito
paulo1205usa Ubuntu
Post recolhido
Enviado em 26/06/2014 - 01:29h
luizsouza99 escreveu:
for (( loop=1;loop>0;loop++));do
sleep 10 # tempo que ele segura o loop, 10 segundos
#código aqui dentro
done
Tecnicamente, esse loop não é infinito. Ele vai contar até o maior inteiro com sinal que caiba na representação da máquina, e depois o valor vai ficar negativo, encerrando o loop.
É claro que, com inteiros de 32 bits e com um intervalo de dez segundos entre cada incremento da contagem, todos nós já estaríamos para lá de mortos antes dessa virada acontecer. Com 64 bits, então, talvez nem mesmo o universo existisse mais, se as teorias dos físicos estivessem certas. Logo, na prática, sua solução, ainda que tecnicamente errada, serviria.
7. Re: Shell Script com loop infinito
paulo1205usa Ubuntu
Post recolhido
Enviado em 26/06/2014 - 01:52h
rai3mb escreveu:
luizsouza99 escreveu:
for (( loop=1;loop>0;loop++));do
sleep 10 # tempo que ele segura o loop, 10 segundos
#código aqui dentro
done
Cuidado ai, tem uma variável que está sendo incrementada infinitamente, vai usar memória e vai crescer até não ser mais possíve.
Comer memória? Por quê?
Versões antigas do bash tinham, sim, um bug que os fazia comer memória se executassem por muito tempo, mas não porque uma variável tinha seu valor alterado, e sim porque ele alocava um pouquinho de memória a cada vez que um comando era executado, e acabava não liberando quando o comando acabava. (Na empresa em que eu trabalhava, por volta do ano 2000, constatamos esse bug da pior maneira, numa máquina que ficava num cliente ao qual não tínhamos acesso remoto, e no qual volta e meia a máquina dava pau. Por "sorte", eu descobri o problema durante uma visita preventiva, poucas horas antes, segundo contas que fizemos depois, da máquina ficar totalmente sem memória. A solução, naquela época, foi trocar o script em bash por um feito em Perl.)
poderia ser feito sem variável com:
while :
do
#codigo a ser executado
sleep 10
done
Minha ideia na primeira postagem era que ele descobrisse isso por conta própria, usando as dicas que eu dei sobre os comandos while, : e sleep e um pouquinho de pesquisa. Não gosto muito da ideia de entregar a solução de bandeja.
Contudo, esse comando não necessariamente será executado de dez em dez segundos, como pediu inicialmente o autor da postagem. Digamos que os comandos antes do sleep levem 9 segundos para executar; nesse caso o comando só será executado a cada 19 segundos (os 9 da execução mais os 10 da espera).
Se isso servir para ele, OK. Se não, ter-se-ia de fazer algo mais elaborado. Por exemplo.
while : ; do
# Usa um arquivo de lock para impedir execução simultânea,
# caso a execução leve mais do que dez segundos.
if [[ ! -e /tmp/lockfile ]]; then
touch /tmp/lockfile
{
# comandos a executar
rm /tmp/lockfile
} & # Note o "&" para execução em background.
fi
sleep 10
done
8. Re: Shell Script com loop infinito
rai3mbusa Outra
Post recolhido
Enviado em 26/06/2014 - 08:02h
Parabéns!
9. Resposta:
raviusa Red Hat
Post recolhido
Enviado em 09/06/2015 - 01:36h
while true; do
chmod -R 733 /home/usuario/DIRETORIO
sleep 10
done
10. Re: Shell Script com loop infinito
lcavalheirousa Slackware
Post recolhido
Enviado em 09/06/2015 - 11:34h
A minha curiosidade aqui é por que seria necessário dar a permissão 733 a cada dez segundos...
--
Luís Fernando Carvalho Cavalheiro
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
11. Re: Shell Script com loop infinito
thinomarusa Linux Mint
Post recolhido
Enviado em 09/06/2015 - 12:52h
Com o for pode ser feito assim:
for (( ; ; ))
do
# codigo
sleep 10
done
Mas essa permissão 733 está me intrigando também.
Ah sim, ótima solução paulo1205.
--
sudo make me a sandwich