Linuxでコマンドをスケジュールしてみよう (2) atコマンドでの実行内容の指定

Linuxでコマンドをスケジュールしてみよう (2) atコマンドでの実行内容の指定

2016.07.06

前回、「Linuxでコマンドをスケジュールしてみよう(1) atコマンドを使った日時指定」では、atコマンドで日時を指定する方法についてご紹介しました。 今回は、at コマンドで日時を指定したあと、コマンドを実行する内容を指定する方法についてご紹介いたします。

atコマンド

前回の記事はこちらから。

では、atコマンド を使用して、コマンドを実行するスケジュール についてご紹介します。

$ at 14:00

上記は、次の14時に実行するようスケジュールすることを指します。
(日時の指定については、前回のコマンドをスケジュールしてみよう ( 1 ) で紹介しています。)
上記を実行すると、画面上にはat>というプロンプトが返ってきます。

at> コマンド行

上記のように、at>プロンプトのあとに実行したいコマンド名や必要な引数を指定します。
例を次に示します。

at> date

上記のように指定することで、dateコマンドが実行されるようスケジュールされます。
(dateコマンドは、現在の日時を表示します。)

この例のように、at>プロンプトのあとにコマンド行を指定して、Enterキーを押します。
次のように、再びat>プロンプトが返ってきます。

at> date
 at>

このat>プロンプトに対して、さらに別のコマンド行を指定することもできます。
複数コマンドを実行したい場合には、次のat>プロンプトにコマンド行を指定してください。

at> date
 at> df –h
 at>

上記のように、dateコマンドを指定し、さらにdf -hコマンドを指定することができます。
それにより、dateコマンドが実行されて、次にdf –hが実行されるようスケジュールしたことになります。
(df –hのコマンド行は、ファイルシステム単位での使用状況(空きサイズの確認)を適切な単位で表示します。)

ではスケジュールするコマンドがすべて指定し終わったら、保存終了の操作を行います。
この保存終了の操作には、[Ctrl]キーと[d]キーを同時に押します。
at>プロンプトに何も指定されていない状態で押してください。

at> date
 at> df -h
 at>            <- この状態で[Ctrl]キーと[d]キーを同時に押す

[Ctrl]キーと[d]キーを押すと、以下のように  という文字が表示されます。

at> date
 at> df -h
 at>

さらに、その次の行には、いつ実行されるかの具体的な日時が表示され、atコマンドは完了となります。

at> date
 at> df -h
 at>
 job 1 at Tue Apr 12 14:00:00 2016

上記の場合は、2016年4月12日火曜日にJobID 1として実行されるように、スケジュールされたことを表します。
JobIDとは、スケジュールされた内容に対して割り当てられた番号です。
番号自体に意味はありませんが、その内容がその番号で表現されることになりますので、JobIDの何番が割り当てられたかは把握してく必要があります。

次の図に、ここまでの実行例を示します。

atqコマンド

では次に、atコマンドでスケジュールしたものを確認します。

スケジュールされているものを確認するときには、atqコマンドを使用します。
(at -lでも確認できます。at -lはatqコマンドの別名(エイリアス)なので、どちらでも動きは同じです。)

$ atq

上記のように、コマンド名だけで実行できます。
では、実行例をみてみましょう。次の図にその実行例を示します。

上記のように、前の例でスケジュールしたものを確認することができます。

ただし、別のユーザがatコマンドを使用してスケジュールしたものを表示することはできません。

例えば、次の図のように、別のユーザ(staffユーザ)がatqコマンドを使用して確認しても、前の例でstudentユーザがスケジュールしたものは表示されていません。

このように、ユーザは自分がスケジュールしたものだけatqコマンドを使用して確認することができます。

ただし、システム管理者であるrootユーザは、すべてのユーザのatコマンドでスケジュールされたものをすべて表示することができます。

上記のようにrootユーザが実行すれば、すべて表示されます。

では次に、atqコマンドで表示される結果の読み取り方についてご紹介します。

第1フィールド:JobID

JobIDはatコマンドでスケジュールした内容に対して割り当てられる番号です。
前の例でatを実行した際にもJobIDが表示されていました。

第2フィールド:実行日時

いつJobIDのものが実行されるかを示します。

第3フィールド:キュー名

アルファベットの一文字で表示されます。
キュー名は、システム的に特に意味はありません。
atコマンド実行時に指定しない場合は、aで表示されます。(aがデフォルトです。)

第4フィールド:ユーザ名

どのユーザとして実行されるかを示します。
atコマンドを実行したユーザの名前になります。

このようにatqコマンドを実行することにより、どのJobIDが、いつ、どのユーザとして実行されるかを確認することができます。
atコマンドでのスケジュールが完了したら、正しい日時に実行されるよう指定されているか、atqコマンドで確認してください。

スケジュール完了後

atコマンドでのスケジュールが完了し、atqコマンドでの確認も済みましたら、あとは実行されるのを待ちます。
実行が完了したJobIDに関しては、atqコマンドの一覧から削除されます。
あとは、スケジュールしておいたコマンドが実行されたことによる成果物を確認します。
まとめ

今回は、前回に引き続き、atコマンドを使ったコマンドのスケジュールの方法と、atqコマンドを使ったatのスケジュールを確認する方法をご紹介しました。

atコマンドを使用することで、指定した日時に、指定したコマンドを自動で実行するようスケジュールすることができます。

前回と今回で基本的なatコマンドでのスケジュールをご紹介してきましたが、まだat関連の機能はたくさんあります。
例えば、atでスケジュールした内容を詳細に確認する、実行される前にスケジュール内容を削除する、スケジュールしたコマンドの実行結果を任意の場所に出力するなど、まだまだat関連の機能をあげることができます。

これらは、また次の機会にご紹介したいと思います。
次回のコラムも、どうぞお楽しみに。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。