sh script não será executado como root (cron)

1

Eu tenho o seguinte script adicionado a cron . Se eu adicionar touch thisisatest.file à primeira linha, ele criará um arquivo chamado thisisatest.file , mas não executará o resto do código. Se eu digitar manualmente ./thescriptname.sh como root, o arquivo será executado como deveria. Eu adicionei /usr/bin antes de find , grep e truncate como sugerido por alguém, no entanto, o script ainda não será executado.

#!/bin/bash
KEYWORDS=("Word1" "Word2" "Word3" "Word4" "Word5")
IFS=$'\n'
/usr/bin/find /root/ . -size +1c -type f ! -exec /usr/bin/grep -qwF "${KEYWORDS[*]}" {} \; -exec /usr/bin/truncate -s 0 {} \;

cronjob -l :

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

*/1 * * * *  /bin/sh /root/miami.sh
root@zzzz:~# 
    
por Guest in need of help 18.01.2014 / 03:46

2 respostas

1

Verifique a linha #! / bin / bash (a linha shebang). Esta é realmente a primeira linha? Talvez o arquivo comece com mais alguns comentários, a linha shebang será ignorada e o script executado com o shell atual (linha de comando pode ser bash, crontab será / bin / sh) O toque funcionará, a linha com o KEYWORDS falhará.

O comando depois! deve ser válido. Quando o arquivo é editado no Windows, a linha pode terminar com \ r \ n. Quando a linha terminar com um espaço, o intérprete estará procurando por "bash".

Você disse que iniciou o programa como ./thescriptname.sh. Neste caso, um shebang inválido será notado também. Mas talvez você tenha começado com

. ./thescriptname.sh

Quando você inicia o arquivo com um ponto, a linha shebang é ignorada. Isso explicaria porque funciona usando a linha de comando.

O crontab forneceu alguma saída? Talvez sua conta Unix tenha um e-mail. Caso contrário, altere o crontab e redirecione o stdout e o stderr para um arquivo tmp:

* * * * *  /bin/sh /root/miami.sh > /tmp/miami.out 2>&1
    
por 30.01.2014 / 14:24
0

Apenas um conselho e opinião; Tente sua mudança de script para

  • / usr / local / sbin ou
  • / usr / local / bin ou
  • / usr / sbin ou
  • / usr / bin ou
  • / sbin ou
  • / bin ou

que são conhecidos pelo cron (mostrado na variável PATH)

e

apenas adicione ao crontab como nome do script.

    
por 22.10.2014 / 11:32

Tags