mudando o shell padrão para / bin / bash no job scheduler como no CRON

2

Eu recentemente mudei de 2>&1 >> para &>>

Existe uma maneira de ter em o uso de / bin / bash como o shell? Por padrão, ele usa / bin / sh e a página de manual não dá nenhuma indicação de como qualquer outra coisa pode ser usada. Mesmo em um crontab , pode-se usar SHELL=/bin/bash

O principal problema que isso está me causando é que:

echo "do-smth.sh &>> logfile" | at now + 8 hours

em vez de acrescentar stdout e stderr ao meu arquivo de log, eles estão se perdendo completamente, nem mesmo sendo enviados por e-mail.

Esta solução alternativa não funcionou, citando um redirecionamento inesperado:

echo "bash <<< \"do-smth.sh &>> logfile\"" | at now + 8 hours

Eu uso o sabor Linux, Ubuntu 11.10, o que não importa.

    
por Marcos 31.01.2012 / 15:37

3 respostas

3

Seu problema é que a maneira como seu comando é escrito, sh está tentando manipular o redirecionamento de herestring e (sendo vinculado a dash , não bash , no Ubuntu) ele não tem o <<< operador. Você provavelmente quer isso:

echo 'bash -c "do-smth.sh &>>logfile"' | at now + 8 hours
    
por 01.02.2012 / 17:27
0

Para registro, aqui está o que eu estou aprendendo, em um caso de uso. Observe como mal é ofuscado devido a evasão inevitável de aspas simples ou duplas:

      pidof -x pngcrush || at now <<< 'time nice bash -c '\''
(for f in $(find orderlog/ -mtime -1 -name \*.png); 
do convert -trim +repage -colors 64 -depth 6 -verbose $f $f.tmp; 
ls -lFa $f*; 
touch -r $f $f.tmp && mv -f $f.tmp $f; 
done;  
time find orderlog/ -mtime -3 -name \*.png -execdir  pngcrush -bit_depth 8 -d ~/tmp -oldtimestamp {} + ; 
mv -fv ~/tmp/*.png orderlog/; 
timeout 1h time find orderlog/ -mtime -2  \( -name \*.png -o -name \*.gif \) -execdir  optipng -keep -preserve -o6 -v  {} + ; 
rm -vf orderlog/*.png.{bak,tmp} ) &> orderlog/imgshrink.log'\'' ' 

Novas linhas adicionadas apenas aqui para facilitar a leitura.

Como está dentro de um script, ele deve ser transformado em um documento aqui para at ler, exceto que tenho medo de quebrar o (não) parse de bash .

    
por 25.02.2012 / 15:45
0

Por que não fazer isso com #!/bin/bash no topo do seu script que o cron executa? Se você criar um diretório com os scripts que usará, poderá colocá-lo sob controle de origem e facilitar a recuperação se perder o acesso a esse disco rígido. Você também pode instalar esses scripts com fantoche, chef ou ansible e apenas adicionar as entradas de linha única no crontab para executar esses scripts.

    
por 25.01.2018 / 14:33

Tags