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

두 번째 또는 그 이후 줄이 아닙니다.

또는 다음을 설정하여 cron 작업에서 bash를 구체적으로 호출하세요.

SHELL=/bin/bash

또는 다음과 같이:

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

관련 정보