이 코드 부분을 사용하여 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
두 번째 또는 그 이후 줄이 아닙니다.
또는 다음을 설정하여 cron 작업에서 bash를 구체적으로 호출하세요.
SHELL=/bin/bash
또는 다음과 같이:
* * * * * root bash /var/********/script.sh -c file.conf > /dev/null 2> /var/********/errors.log