"at"コマンドはシェルスクリプトを実行しません

特定の時間にスクリプトを実行したいと思います。 atコマンドが解決策であることがわかりましたが、添付のシェルスクリプトは実行されませんでした。以下で複数のコマンドを使用しましたが、役に立ちません。

echo "`./time.sh`" | at -t 07101805

echo `./time.sh` | at -t 07101805

at -t 07101738 <./time.sh

at -t 07101737 -f ./time.sh

私もatrun次のコマンドを使い始めました。

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

ジョブのリストは次のとおりです。

at -l

2020年7月10日金曜日18:15:00

時間の経過とともにリストから消えます。これは、atコマンドは機能しますがスクリプトは実行されません。

シェルスクリプトはシンプルで、次のようになります。

#!/bin/sh

echo "the time is `date`" >time.txt

echo "yes the at command worked">>time.txt

他の方法があれば共有してください。ありがとう

ベストアンサー1

atには、固定時間と直感的な時間の2つの時間が必要です。

-t 202111231735は2021年11月23日17:35です。

今+ 3日、来週の火曜日12:00に予想通りにしてください。

paul $ echo foo | at now + 3 days
warning: commands will be executed using /bin/sh
job 16 at Tue Jul 14 16:55:00 2020
paul $ date
Sat 11 Jul 16:56:02 BST 2020
paul $ echo foo | at 0700
warning: commands will be executed using /bin/sh
job 17 at Sun Jul 12 07:00:00 2020
paul $ echo foo | at 1200 next tuesday
warning: commands will be executed using /bin/sh
job 18 at Tue Jul 14 12:00:00 2020
paul $ atq
18  Tue Jul 14 12:00:00 2020 a paul
17  Sun Jul 12 07:00:00 2020 a paul
16  Tue Jul 14 16:55:00 2020 a paul
paul $

あなたのバックティックコマンドは完全に間違っています。すぐにスクリプトを実行し、実際の標準出力を次のタスクに入力します。ジョブの作成時にすべての出力をリダイレクトすると、ジョブは実際には空になります。つまり、入れる標準出力はありません。

atから複数のコマンドを読み取ることも欠陥があります。それらはあなたが持っているシェルではなく/bin/shによって実行されます。実際に数行のコマンドが必要な場合は、HereDocを使用してジョブを作成するとき、または最終的に実行したときにシェル拡張が発生することに注意してください。

スクリプト名(およびすべてのパラメータ)をatにエコーします。その後、atのシェルはshebangをチェックし、正しいシェルを実行します。また、まだ実際のスクリプトを読み取っていないため、スクリプトで変更した内容は機能しません。スクリプトを実行する前に cwd と環境を復元するので、パス名は必要ありません。

日付の直感的な時間指定は(my Mintに)文書化されています/usr/share/doc/at/timespec。 Bachus-Naur構文の形をとるので、それほど便利ではありません。at 07101805未定義のトークンで構文解析を使用すると、CC> = 1900、CC == 00が現在の世紀であり、{01..18}のCCが1900に基づいていると仮定concatenated_dateするようです。MMDDCCYY

保存したジョブを確認してください。たとえば、次のようになります。

paul $ at -c 18
#!/bin/sh
# atrun uid=1000 gid=1000
# mail paul 0
umask 22
XDG_VTNR=8; export XDG_VTNR
... 50 lies of setup.
COLORTERM=mate-terminal; export COLORTERM
XAUTHORITY=/home/paul/.Xauthority; export XAUTHORITY
cd /home/paul || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
foo

おすすめ記事