![freebsd에서 at 명령을 사용하여 bash 스크립트를 실행하는 방법](https://linux55.com/image/186373/freebsd%EC%97%90%EC%84%9C%20at%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
특정 시간에 시작되는 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