LoginSignup
0
0

【Bash】trap、デバッグ、Cron 作成 について

Last updated at Posted at 2024-06-06

はじめに

今回は 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 で定義する)
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 

おわりに

どれも使ったことがない機能で新鮮〜

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0