についての質問


2

特定の時間に実行するジョブをスケジュールするためにatを使用しようとしました。Macコンピューターを持っています。たとえば、私はターミナルで次のことでこれをテストしようとしました:

at now + 1 minute
echo 'Test at'
<EOD>

1分以上経っても、エコーアウトは見られませんでした。次のコマンドを入力した後:

at -l

仕事が見つかりませんでしたが、メールがあるというメッセージが表示されました。メールコマンドでメールに行きました。1つのメッセージが表示され、1と入力しました。ジョブの出力がメールにあるのを確認しました。

私の最初の質問は、これがatコマンドのデフォルトの動作かどうかわからないということです。この振る舞いを変更する方法はありますか。変更する方法は、可能な場合は結果を導きます。

私の理解では、スケジュールされたジョブにメッセージがあり、出力メッセージがメールに返送される場合です。次に関連する質問は、スケジュールされたジョブがどこで実行されるかわからないということです。背景に?fgまたはbgコマンドを使用して見つけることができませんでした。

回答:


3

それは実際にatのmanで述べられているatのデフォルトの振る舞いです:

ユーザーには、もしあれば、コマンドからの標準エラーと標準出力がメールで送られます。メールはsendmail(8)コマンドを使用して送信されます。atがsu(1)シェルから実行されると、ログインシェルの所有者がメールを受け取ります。

別の動作のためには、呼び出すことができます、このように:

$ at now + 1 minute 
$ echo "test at" > /dev/ttys000
$ <EOD>

STDOUTを端末ttys000にリダイレクトします。/ dev / ttys000をターミナルの対応するデバイスファイルに置き換える必要があります。これは、次のコマンドを実行して確認できます。

$ tty

スケジュールされたジョブは、bgがリストしないように、独自のシェルで実行されます(詳細はmanを参照)。スケジュールされたジョブのリストを表示するには、atqまたはat -lを試してください。


ttyコマンドを使用して現在のttyを検索する代わりに、現在の作業端末を常に表す汎用の/ dev / ttyを使用できると以前にコメントしました。これは本当ですが、制御端末のない環境で実行されるため、これはatコマンドでは機能しないと今考えています。元のアドバイスに戻って現在の端末を見つけ、それにリダイレクトする必要があります。誤報でごめんなさい。
nagul

メールアドレスは、UNIXメールのデフォルトアドレスです。GmailまたはインターネットプロバイダーのメールアカウントであるiMailにリダイレクトする方法はありますか?もう1つの方法は、ローカルメールをセットアップして、メールをiMailボックスにリダイレクトすることです。または、ローカルメールボックスを開くようにiMailを設定できますか?
David.Chu.ca

4

はい、atコマンドを呼び出したユーザーへのメール送信がデフォルトの動作です。

at manページから:

コマンドは別個のシェル呼び出しで実行されるため、制御端末のない別個のプロセスグループで実行されるため、呼び出し環境から継承されたオープンファイル記述子、トラップ、および優先順位は失われます。

上記の結果、コマンドの出力を伝える簡単な方法はありません。もちろん、コマンドの一部として、出力をファイルにリダイレクトしたり、代替メカニズムを使用して出力を伝達したりできます。

スケジュールされたジョブが表示されない場合は、atジョブを受信して​​実行するatdデーモンがシステム上で実行されているためです。Macでは、これらはAppleのオールインワン交換デーモンであるlaunchdデーモンによって処理される場合があります。

launchdデーモンは、本質的に、init、rc、init.dおよびrc.dスクリプト、SystemStarter(Mac OS X)、inetdおよびxinetd、atd、crondおよびwatchdogdの代わりになります。Appleは、前述のサービスをすべて削除して、launchdを支持するつもりであると述べています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.