特定の時間に起動する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