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

関連情報