특정 시간에 시작되는 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
표준 입력이나 옵션이 주어진 파일에서 읽은 명령은 다음과 같이 -f
FreeBSD에서 실행됩니다 .sh
at(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