はじめに
今回は trap、デバッグ、Cron 作成について触れます。
trap の利用
trap とは
シェルスクリプトがシグナルを受け取った場合に実行される処理を trap で定義することができる。
trap 関数名(またはコマンド名) シグナル名
と記述する。
*) シグナル名はシグナル番号に置き換えることも可能だが、可読性の観点で非推奨
*) 多くはシェルの終了時の処理を記述する
シグナル番号 | シグナル名 | 意味 |
---|---|---|
1 | HUP | 制御端末の切断 |
2 | INT | 割り込み( ctrl + c ) |
15 | TERM | プロセスの終了命令 |
# 2( ctrl + c )で終了した場合 print 'HELLO WORLD' が実行される
trap "print 'HELLO WORLD'" INT
print() {
echo ${1}
# exit する必要がある
exit
}
trap "remove_tmp_file" HUP INT TERM
remove_tmp_file() {
rm ./tmp_file
# exit する必要がある
exit
}
touch tmp_file
デバッグモード
set -x、set +x
set -x と set +x を用いることで、シェルスクリプトの実行をデバッグモードにしたり、デバッグモードから元に戻すことができる。
デバッグモードにすることで、ファイルがどの行を実行しているのか 標準出力される ため、エラー解析には便利である。
ただし処理速度は若干遅くなるため、本番環境では外す必要がある。
set -x # ここからデバッグモード
:
echo "Hello"
:
echo +x # デバッグモード終了
#!/bin/bash -x
ファイルの先頭に -x をつけることで、ファイル全体をデバッグモードにする。
この場合も set +x でデバッグモードを解除できる。
#!/bin/bash -x
:
set +x # デバッグモード終了
Cron の作成
Cron とは
Cron とは、ユーザが直接実行せずとも決められた時間にコマンドやスクリプトを実行する機能である。
crond というデーモンプロセスが登録された Cron をチェックして、時間になれば処理を行う。
Cron の設定ファイル
Cron の設定ファイルは、各時刻ごとに実行されるよう以下のフォーマットで記述する。
# [分 (0-59)] [時間 (0-23)] [日にち (1-31)] [月 (1-12)] [曜日 (0-6)] [コマンド]
# 3月15日22時34分に command が実行される
34 22 15 3 * command
# 毎日、2時 - 7時の0分に command が実行される
0 2-7 * * * command
cron の設定で利用する記号 | 意味 |
---|---|
* | 全時間を表す( * : 0 時から 23 時まで ) |
- | 幅を表す( 0-9 : 0 時から 9 時まで ) |
, | リストを表す( 0, 3, 14 : 0, 3, 14時 ) |
/ | 間隔を表す( */3 : 0, 3, 6, 9, ... , 21時) |
/etc/cron.{hourly,daily,weekly,monthly}/
毎時、毎日、毎週、毎月に実行されるジョブを格納するディレクトリ
パス | ジョブ |
---|---|
/etc/cron.hourly/ | 毎時実行されるジョブを格納 |
/etc/cron.daily/ | 毎日実行されるジョブを格納 |
/etc/cron.weekly | 毎週実行されるジョブを格納 |
/etc/cron.monthly | 毎月実行されるジョブを格納 |
/etc/cron.d/
いつ実行するのか設定を記述したファイルを格納するディレクトリ
# rootユーザで実行
# run-parts: ディレクトリ内のスクリプトを全て実行する
01 * * * * root run-parts /etc/cron.hourly
/etc/crontab
毎時、毎日、毎週、毎月に実行されるジョブを記載するファイル
[ec2-user@localhost ~]$ vim /etc/crontab
# * * * * * user-name command to be executed
*/1 * * * * root /etc/cron.hourly/1cron
crontab コマンド
各ユーザの cron 設定用のファイル /var/spool/cron/ を編集・表示するコマンド
オプション | 意味 |
---|---|
-u | ユーザ名の指定 |
-l | cron の設定を表示 |
-e | cron を設定 |
[ec2-user@localhost ~]$ crontab -l
0 * 15 3 * command/script
[ec2-user@localhost ~]$ crontab -e
おわりに
どれも使ったことがない機能で新鮮〜