Alterar o shell para o trabalho cron

2

Eu tenho um script zsh que gostaria de executar via anacron toda semana.

Ele roda bem a partir de um shell bash interativo, mas quando executado pelo anacron, estou recebendo erros de comando não encontrados e parece que está ignorando a linha shebang.

O script /etc/cron.weekly/ é:

#!/bin/sh

[ -x SCRIPT ] || exit 1

su NORMAL_USER SCRIPT

E a linha superior do script real é #!/bin/zsh

Como posso obter anacron para honrar a shebang? A mudança do shell de login do NORMAL_USER para o zsh conseguiria isso?

    
por Ryan Ahearn 20.11.2009 / 16:00

3 respostas

2

Por que não funciona:
A razão pela qual isso não funciona é que su exige que você execute o comando a partir de um terminal, e o cron não fornece um terminal.

A maneira simples de fazer isso é usar o Vixie Cron:
Se você não se importou em usar o Vixie Cron, acho que a coisa mais simples a fazer seria colocar o script para esse usuário executando o seguinte como aquele usuário:

crontab -e 

Em seguida, use 0 0 * * 0 como a hora.

Se você quiser usar o Anacron como usuário:
Anacron é útil se você quiser ter certeza de que o trabalho não será perdido se a máquina estiver desligada. Para executar um usuário diferente, especifique um arquivo de guia anacron e um diretório de spool diferentes, coloque o seguinte no cron do sistema para ser executado como o usuário especificado, anacron -t /home/foo/etc/anacrontab -S /home/foo/var/spool/ e edite esse arquivo de guia para executar o script.

Existe também um mini-howto , mas parece mais complicado.

Você terá que testá-los para verificar. Por fim, lembre-se disso para testes futuros. run-parts --test /etc/cron.weekly

    
por 20.11.2009 / 16:05
0

O shebang deve cuidar disso. A primeira coisa que vejo quando os scripts não são executados corretamente em cron são variáveis de ambiente, como $PATH . O $PATH para cron é muito mais simples que o de um usuário. Você pode definir um $PATH no script cron .

Você também pode codificar totalmente o caminho completo para todos os executáveis em seu script.

Se zsh não estiver em /bin/zsh , você deve receber uma mensagem de intérprete inválida, mas disse que está funcionando bem a partir de um prompt do Bash, por isso duvido que esse seja o problema.

    
por 20.11.2009 / 16:19
0

Alterar o shell de login do usuário para zsh faz isso funcionar. Eu estava querendo experimentar o zsh como meu shell de login por algum tempo. Nada como a necessidade de te dar um empurrão para fazer algo.

    
por 20.11.2009 / 17:09