非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

linuxコマンド jobコントロール系

まとめてみた

fg

バックグラウンドで実行しているジョブをフォアグラウンドに切り替える。
バックグラウンドでジョブを実行するには、コマンドの後に&を入力する。

fg ジョブ番号

bg

ジョブをバックグランドで実行する

bg ジョブ番号

at

指定時刻にジョブを自動実行する
ファイルを指定しないと、標準入力でコマンドを指定。Ctrl+Dで決定

at -l         # 一覧表示
at -f ls.sh 18:00   # ファイル内のコマンドを18時に実行
at -d 6        # 指定したジョブ削除

jobs

バックグランドジョブまたは、または停止中のジョブを表示する。
バックグランドジョブのジョブ番号、ジョブの状態、ジョブの名称の一覧を表示する。

jobs

atq

at、batch、crontabコマンドを実行してスケジュールされたジョブを一覧表示する

atq

atrm

at、batch、crontabコマンドを実行してスケジュールされたジョブを削除する
一般ユーザーは自分が実行したもののみ、削除できる

atrm ジョブ番号

batch

システム負荷を見ながらジョブを自動実行する
atコマンドとの違いは、指定時刻になった時に無条件にジョブが実行されるのではなく、システムの負荷が特定の値以下になるまで待機してからジョブを実行する点

batch -f ls.sh 18:00   # ファイル内のコマンドを18時に実行

nohup

ハングアップに反応しないようにしてコマンドを実行する(ログアウトしても処理を中断させない )
HUPシグナルを無視するようにプログラムを実行
ハングアップとは、動作していたソフトウェアが停止し、コンピュータが操作を受け付けなくなる現象や状態のこと

nohup ls.sh &   # バックグラウンドでls.shを実行

stop

バックグランドのジョブを中断する

stop ジョブ番号

crontab

指定日時にジョブを繰り返し実行する
cron を使用するためにはcrondというデーモンが起動している必要がある

crontab -l    # cronの内容を表示する
crontab -e    # cronを編集する
crontab -r    # cronをすべて削除する

設定ファイル

crond は、毎分、以下の設定ファイルの内容に変更がないかを確認し、変更があった場合には、それを反映して実行する。

ディレクトリ名 内容
/var/spool/cron/user ユーザの自動タスク設定ファイル
/etc/crontab 毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル
/etc/cron.hourly 毎時実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.daily 毎日実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.monthly 毎月実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.weekly 毎週実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.d 上記以外の自動タスク設定ファイルを置くディレクトリ

書き方

分 時間 日 月 曜日 コマンド名 の順に書く

* * * * * command   # 毎分commandを実行
30 17 25 * * command   # 毎月25日17時30分にcommandを実行
0 12 * * 1 command  # 毎週月曜日12時にcommandを実行

注意点

  • 重複起動防止の機能はなく、個々のプログラムで排他制御をする必要がある
  • 基本1分単位でしか起動できなく、また祝日判定などこった指定はできない
  • 登録した時間にマシンが起動していないと、起動されない
  • 処理が異常終了した際にこったリカバリ作業はできない