crontabでスクリプトを起動すると、Typesetting:Not Found?エラーが発生します。

crontabでスクリプトを起動すると、Typesetting:Not Found?エラーが発生します。

このコード部分を使用して、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]=""
)

シェルコンソールを使用してスクリプトを実行すると、すべてがうまく機能していますが、crontabを使用して実行をスケジュールするためにエラーが発生します。

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

これは私の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

理由を説明できますか?ありがとう

答え1

あなたのスクリプトは、bashやkshなどの配列をサポートするシェルで実行されているとします。 she-bang行がないということは、cron(デフォルトでは)が/ bin / shを呼び出してスクリプトを実行することを意味します。SHELL=/bin/shcrontabの特定の設定はこの動作を強制します。

bashをインタラクティブに使用する場合は、bashをshe-bang行として指定してください。最初の行は次のようになります。

#!/bin/bash

2番目以降の行ではありません。

または、次のように設定してcronジョブでbashを具体的に呼び出します。

SHELL=/bin/bash

または次のように:

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

関連情報