このコード部分を使用して、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/sh
crontabの特定の設定はこの動作を強制します。
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