script não grava no arquivo quando executado a partir do cron

2

Quando executo um script / bin / bash, ele funciona bem e faz login em alguns arquivos de log dentro do script. Mas, quando eu corro do cron, ele não loga no arquivo! ele só registra em / var / mail / root, dizendo que

Date: Fri, 12 Aug 2016 08:39:01 +0300 (MSK)

/bin/sh: 1: root: not found

este é o script:

#!/bin/bash

LOG_FILE="test-crontab.log"
echo "started testing cron" >> ${LOG_FILE}

pgrep tunnel
if [[ ${?} != 0 ]]; then
  echo "Tunnel process is not running..." | tee -a ${LOG_FILE}
  echo "initializing tunnel..." | tee -a ${LOG_FILE}
  /usr/local/bin/stunnel | tee -a ${LOG_FILE} 2>&1
fi

echo 'date' >> ${LOG_FILE}

e este é o cron:

45 8 * * *  /home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.sh > /dev/null
    
por Sam 12.08.2016 / 07:49

2 respostas

4
  1. Para obter o arquivo de log onde você espera, substitua:

    LOG_FILE="test-crontab.log"
    

    Com:

    LOG_FILE="/home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.log"
    
  2. O comando [[ ${?} != 0 ]] é somente bash. Na mensagem de erro que você cita, o script parece estar sendo executado em /bin/sh . Uma maneira de corrigir isso é substituir:

    if [[ ${?} != 0 ]]; then
    

    Com:

    if [ ${?} != 0 ]; then
    

    Outra abordagem é executar crontab -e e adicionar a seguinte linha ao seu arquivo crontab :

    SHELL=/bin/bash
    
  3. Além disso, para simplicidade e estilo, considere substituir:

    echo 'date' >> ${LOG_FILE}
    

    com:

    date >> "${LOG_FILE}"
    

    Isso elimina o uso inútil do eco.

  4. Por último, considere colocar aspas duplas em torno de todas as variáveis do shell, particularmente $LOG_FILE . Como o valor atual de LOG_FILE não contém espaços ou caracteres ativos em shell, isso não é necessário agora. Porém, colocar aspas duplas em torno deles evitará surpresas desagradáveis no futuro.

por John1024 12.08.2016 / 09:50
0

Acho que sua entrada no crontab está errada.

O formato do arquivo crontab do ubuntu é "m h dom mon dow user command", onde as primeiras 5 entradas especificam a hora em que a tarefa é executada. A 6ª entrada é o usuário que executa o trabalho (acho que isso está faltando na sua entrada) e a 7ª entrada é o comando que você deseja executar.

Acho que você deve corrigir sua linha de crontab para

45 8 * * * root /home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.sh > / dev / null

assumindo que você quer que o comando seja executado como root

    
por Nick Sillito 12.08.2016 / 10:35