freebsd에서 at 명령을 사용하여 bash 스크립트를 실행하는 방법

freebsd에서 at 명령을 사용하여 bash 스크립트를 실행하는 방법

특정 시간에 시작되는 bash 스크립트가 있습니다. 나는 at 명령을 사용했다. at을 사용하여 실행하면 작업이 생성되고 작업이 시작된 후 작동하지만 작동하지 않습니다. 없이 스크립트를 실행하면 제대로 작동합니다. bash는 sh 스크립트를 실행하기 때문에 문제가 있다고 생각합니다.

이것은 내 스크립트의 일부입니다.

#!/usr/local/bin/bash

IFS=' ' read -r -a array <<< "$LIST"
for element in "${array[@]}"
  do
    touch /tmp/$element.call
    cat >> /tmp/$element.call <<-EOF
    Channel: SIP/${element}
    Application: Playback
    Data:${FILE}
    Callerid: ${CALLERID}
    EOF
    mv /tmp/$element.call  /var/spool/asterisk/outgoing/
done

다음과 같이 at 명령을 실행합니다.

export FILE=hello-world.gsm LIST=4001 5001 6001  CALLERID=123; sudo -E at -t 20210140636.00 -f  /usr/local/bin/asterisk_wakeup_call.sh

문제를 파악하는 데 도움을 주실 수 있나요?

감사해요

답변1

표준 입력이나 옵션이 주어진 파일에서 읽은 명령은 다음과 같이 -fFreeBSD에서 실행됩니다 .shat(1)수동. 이는 #!스크립트의 - 행이 무시됨을 의미합니다.

스크립트가 올바르게 실행되도록 하려면 스크립트 파일의 명령 대신 스크립트 실행을 예약하십시오.

예를 들어 다음과 같이 할 수 있습니다.

echo /usr/local/bin/asterisk_wakeup_call.sh | at -t 20210140636.00

전체 명령( LIST공백으로 구분된 숫자의 문자열이어야 함):

sudo env \
    FILE=hello-world.gsm \
    LIST='4001 5001 6001' \
    CALLERID=123 \
    sh -c 'echo /usr/local/bin/asterisk_wakeup_call.sh | at -t 20210140636.00'

또는,

echo /usr/local/bin/asterisk_wakeup_call.sh |
sudo env \
    FILE=hello-world.gsm \
    LIST='4001 5001 6001' \
    CALLERID=123 \
    at -t 20210140636.00

이는 또한 env우리가 시작하는 셸에 환경 변수를 전달하는 데 사용되는데, 이는 sudo -E.

또한 시간 지정이 20210140636.00잘못되었습니다. 어딘가에 숫자가 누락되었습니다(아마 그날의 사양에 있을 것임).2021 01 40 636 .00

관련 정보