macOSで「at」コマンドを学んでいます。しかし、私の "at"コマンドジョブはスケジュールされていますが、実行されませんでした。たとえば、次のような単純なコマンドを実行すると、echo "hello world" | at 9:30 AM
出力は生成されません。ディレクトリの作成も試みましたが、期待どおりに機能しませんでした。これは私が使用するスクリプトです。
#!/bin/bash
mkdir at_file
touch at_file/files{001..100}.txt
atrunサービスやmacOS関連の他の設定に関する問題があるようです。私が理解したことが正しい場合は、特にmacOSでこの問題を解決する方法についての指示をいただきありがとうございます。
また、問題を解決するために次の手順を試しました。
まず、次のコマンドを使用してatrunサービスを削除してロードしようとしました。
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.atrun.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
ただし、2 番目のコマンドを実行すると、「ALREADY RUNNING」が出力として表示されます。
その後、次のコマンドを使用してatrunサービスを停止して開始しようとしました。
sudo launchctl stop com.apple.atrun
sudo launchctl start com.apple.atrun
しかし、launchctl list | grep com.apple.atrun を使用してステータスを確認すると、出力は生成されません。
最後に、at -lコマンドを実行してすべてのジョブIDとスクリプトをリストしましたが、ジョブは実行されませんでした。
"at"コマンドを使用してジョブをスケジュールしましたが、期待どおりに実行されていないようです。なぜこれが起こるのかわかりません。この問題を解決するのに役立つか指示をいただきありがとうございます。
答え1
2つの理由:
(a)echo
テキストをhello world
パイプに送信し、at
実行するコマンドとして保存します。コマンドがhello
存在しなかったため、操作が失敗しました。を使用してこの問題を解決できますecho "echo hello world" | at 9:30 AM
。個人的には、HereDocで実行するコマンドを入力することを好みます。
(b)at
システムはどの端末がジョブを設定したかを知らない。ジョブはバックグラウンドスクリプトによって設定されることがあり、いずれの場合でも、ジョブ設定とジョブ実行の間に端末が閉じることがあります。したがって、ジョブから出力を送信する場所はありません。at
ジョブの標準入力は /dev/null に接続されます。通常、stdoutとstderrは、リダイレクトされない限り、ジョブの所有者に電子メールで送信されます。
編集:バックグラウンドで実行されているタスクの場合は、小さな手順を実行してください。すべてを文書化し、実際に実行された(そしていつ)証明し、デバッグで記入し、実際に起こったことを投稿します。
~/Debug.atjob が作成されると、at
システムが動作するようになります。そうでなければ、それはまさに以前ではなく、インストールを台無しにする時です。
now + 1 minute
また、この値は最も近い分単位で丸められます。at
パッケージの一部であり、cron
わずか1分で差別されました。cron
機能しないと気づくことがあります。
$ ls -l ~/Debug.atjob at_file
ls: cannot access '/home/paul/Debug.atjob': No such file or directory
ls: cannot access 'at_file': No such file or directory
$ cat atBug
#! /bin/bash
{
pwd
date '+Began at %T'
mkdir at_file
echo "Status mkdir $?"
ls -ld at_file
touch at_file/files{001..100}.txt
echo "Status touch $?"
echo 'First three'
ls -l at_file | head -n 3
echo 'Last three'
ls -l at_file | tail -n 3
date '+Ended at %T'
} > ~/Debug.atjob 2>&1
$ date; echo './atBug' | at now + 1 minute; atq
Tue 18 Jul 09:06:48 BST 2023
warning: commands will be executed using /bin/sh
job 45 at Tue Jul 18 09:07:00 2023
45 Tue Jul 18 09:07:00 2023 a paul
$ sleep 60
$ cat ~/Debug.atjob
/home/paul
Began at 09:07:01
Status mkdir 0
drwxrwxr-x 2 paul paul 4096 Jul 18 09:07 at_file
Status touch 0
First three
total 0
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files001.txt
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files002.txt
Last three
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files098.txt
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files099.txt
-rw-rw-r-- 1 paul paul 0 Jul 18 09:07 files100.txt
Ended at 09:07:01
$