obter um erro typeset: não encontrado quando eu lanço meu script por crontab?

0

Eu uso essa parte do código para definir valores padrão na minha configuração no meu script.sh

# Copyright (c) 2015 
# Licence MIT ( http://choosealicense.com/licenses/mit/ ).
#!/bin/sh

typeset -A config # init array
config=( # set default values in config array
    # chemin du dossier de log
    [log]=$SCRIPTPATH"/logs"
    # chemin du dossier local 
    [local]=""
)

quando eu inicio meu script com o shell console tudo está OK e funcionando Mas se eu quiser programar o lançamento com o crontab eu recebo um erro

/var/********/script.sh: 148: /var/********/script.sh: typeset: not found
/var/********/script.sh: 149: /var/********/script.sh: Syntax error: "(" unexpected

aqui está a minha linha crontab

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

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

* * * * * root /var/********/script.sh -c file.conf > /dev/null 2> /var/********/errors.log

você pode me explicar por quê? obrigado

    
por J.D 19.10.2018 / 18:08

1 resposta

0

Seu script está assumindo que ele está sendo executado em um shell que suporta matrizes, como bash ou ksh. A falta de uma linha she-bang significa que o cron (por padrão) invocaria / bin / sh para executar o script. Especificamente, definir SHELL=/bin/sh no crontab impõe esse comportamento.

Se você estiver usando bash interativamente, especifique bash como a linha she-bang - a primeira linha deve ser:

#!/usr/bin/bash

não é a segunda linha ou as linhas subsequentes.

Como alternativa, invoque especificamente o bash no cron job, seja configurando:

SHELL=/usr/bin/bash

ou com:

* * * * * root bash -c "/var/********/script.sh -c file.conf > /dev/null 2> /var/********/errors.log"
    
por 19.10.2018 / 18:31