0
1

More than 5 years have passed since last update.

CentOS | cron | log > サーバーのrunning processのログを取る作業

Last updated at Posted at 2018-03-08
動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
NCAR Command Language Version 6.3.0
for WRF3.7.1, WPS3.7.1
  openmpi-1.8.x86_64 とその-devel
  mpich.x86_64 3.1-5.el6とその-devel
  gcc version 4.4.7 (とgfortran)
for WRF3.9, WPS3.9
  Open MPI v2.1.1
  gcc version 4.9.2 (とgfortran; devtoolset-3使用)
 NetCDF v4.4.1.1, NetCDF (Fortran API) v4.4.4
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
date (GNU coreutils) 8.4 
tmux 1.6-3.el6

実装内容

原因不明の再起動を起こしたサーバー。
今後の原因調査のため、@tukiyo3 さんのコメントの方法でログを取ってみます。

ログの概要

  • 出力先は/home/wrf/LOG_SERVER_180308
    • mkdirしておく
  • 日付のディレクトリを作成し、日付ごとにログを取る
    • 例: /home/wrf/LOG_SERVER_180308/2018-03-08
  • ログの出力は1分間隔とする
    • 今後変更するかもしれない
    • 例: /home/wrf/LOG_SERVER_180308/2018-03-08/log_proc_2018-03-08_105501
    • 例: /home/wrf/LOG_SERVER_180308/2018-03-08/log_proc_2018-03-08_105601

bash script v0.1

(追記 2018/03/08) v0.2を後で記載しています。

log_runnig_process_180308_exec
#!/usr/bin/env bash

# v0.1 Mar. 8, 2018
#  - log running process
#     + to take difference between before- and after- the unintended reboot
#     + CentOS 6.8 used for WRF
#

set -eu

BASE_DIR=/home/wrf/LOG_SERVER_180308
SUB_DIR=$(date "+%Y-%m-%d")
PREFIX="log_proc"
TIMESTAMP="$(date "+%Y-%m-%d_%H%M%S")"
WORK_DIR=$BASE_DIR/$SUB_DIR

set +e  # to prevent "mkdir: cannot create directory" for existing dir.
mkdir $WORK_DIR
set -e
FILEPATH=$WORK_DIR/${PREFIX}_${TIMESTAMP}

ps -ef > $FILEPATH

set +eは下記と関連する。

cron設定 v0.1

(追記 2018/03/08) v0.2を後で記載しています。

$ sudo cat /var/spool/cron/y_okada
30 20 * * * /home/wrf/TOOL/backup_exec
*/1 * * * * /home/wrf/TOOL/log_runnig_process_180308_exec

1つ目はプログラムのバックアップ用の処理 (今回の内容とは無関係)。
2つ目が今回追加したもの。

備考

1分ごとにmailがやってくる。
mailの処理をしないといけない。
backup_execのメールが埋もれる。

1分ごとにコマンドを実行するPythonスクリプトを実装し、それを起動し続けるという方法もある。

メモ: サーバーの時計が7分ずれていることに気付いた (実際の時刻 - 7分)。

関連

bash script v0.2

log_runnig_process_180308_exec
#!/usr/bin/env bash

# v0.2 Mar. 8, 2018
#  - use [mkdir -p] for existing directories
# v0.1 Mar. 8, 2018
#  - log running process
#     + to take difference between before- and after- the unintended reboot
#     + CentOS 6.8 used for WRF
#

set -eu

BASE_DIR=/home/wrf/LOG_SERVER_180308
SUB_DIR=$(date "+%Y-%m-%d")
PREFIX="log_proc"
TIMESTAMP="$(date "+%Y-%m-%d_%H%M%S")"
WORK_DIR=$BASE_DIR/$SUB_DIR

mkdir -p $WORK_DIR
FILEPATH=$WORK_DIR/${PREFIX}_${TIMESTAMP}

ps -ef > $FILEPATH

ログのdiff

$ diff log_proc_2018-03-08_112101 log_proc_2018-03-08_112201
667,669c667,669
< root      7863  5964  0 11:21 ?        00:00:00 CROND
< y_okada   7864  7863  0 11:21 ?        00:00:00 bash /home/wrf/TOOL/log_runnig_process_180308_exec
< y_okada   7868  7864  0 11:21 ?        00:00:00 ps -ef
---
> root      7871  5964  0 11:22 ?        00:00:00 CROND
> y_okada   7872  7871  0 11:22 ?        00:00:00 bash /home/wrf/TOOL/log_runnig_process_180308_exec
> y_okada   7876  7872  0 11:22 ?        00:00:00 ps -ef

ログを取るための処理がログに記載される。

1分ごとにコマンドを実行するPythonスクリプトを実装し、それを起動し続けるという方法もある。

にした方がいいかもしれない。
(1分ごとにインターバル処理するbashスクリプトでも)。

cron設定 v0.2

@tukiyo3 さんのコメント
にて色々な方法を提案いただきました。

情報感謝です。
「標準出力は捨てる方法」を使わせていただきます。

0
1
4

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
1