Linux
logrotateの処理順
- firstaction/endscriptの実行
- ローテーション済みファイルのローテーション
(例:test.1.gz->test.2.gz) - prerotate/endscriptの実行
- 対象ファイルのローテーション(例:test->test.1)
- postrotate/endscriptの実行
- ファイルの圧縮(例:test.1->test.1.gz)
- preremove/endscriptの実行※
- 圧縮元ファイルの削除(例:test.1の削除)※
- preremove/endscriptの実行※
- 期限切れファイルの削除(例:test.3.gzの削除)※
- lastaction/endscriptの実行
※preremoveはローテーション対象ファイル数分、繰り返し実行される。
検証記事はブログへ
anacron によるジョブの実行時刻について
anacronはcronにより、1時間に1回起動される。
(/etc/cron.hourly/0anacronにより、デフォルトでは毎時1分に起動される)
設定ファイルは以下である。
/etc/anacrontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
# period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.daily nice run-parts /etc/cron.weekly
@monthly 45 cron.daily nice run-parts /etc/cron.monthly
anacronが起動された際に、以下の様に、ジョブの実行時刻を決定する。
ジョブの実行時刻 = anacronの起動時刻 + ランダム遅延時間 + ジョブ固有の遅延時間
ジョブの実行時刻がジョブの実行時間範囲内である場合、実行される。
ジョブの実行時刻がジョブの実行時間範囲内でない場合、スキップされる。
- ランダム遅延時間 = RANDOM_DELAY
- ジョブ固有の遅延時間 = delay in minutes
- ジョブの実行時間範囲 = START_HOURS_RANGE
また、ジョブの実行時刻が1時間以上後の場合、次回のジョブがスキップされる。
以下にanacronの動作例を記載する。
-
02:01にanacronが起動
RANDOM_DELAY = 40であったとする。cron.daily
02:01 + ランダム遅延時間(40min) + ジョブ固有の遅延時間(5min) = 02:46
ジョブの実行時間範囲外であるため、実行されないcron.weekly
02:01 + ランダム遅延時間(40min) + ジョブ固有の遅延時間(25min) = 03:06
ジョブの実行時間範囲内であるため、実行される。cron.monthly
02:01 + ランダム遅延時間(40min) + ジョブ固有の遅延時間(45min) = 03:26
ジョブの実行時間範囲内であるため、実行される。 -
03:01にanacronが起動
02:01に起動したanacronのジョブ実行時刻が03:01以降であるため、
ジョブ実行履歴ファイル(/var/spool/anacron/cron.*)をロックし続けており、スキップされる。 -
03:06 にcron.weeklyジョブが実行される。
-
03:26 にcron.monthlyジョブが実行される。
-
04:01にanacronが起動
RANDOM_DELAY = 15であったとする。cron.daily
04:01 + ランダム遅延時間(15min) + ジョブ固有の遅延時間(5min) = 04:21
ジョブの実行時間範囲内であるため、実行される。cron.weekly
本日既に実行されているため、実行されない。cron.monthly
本日既に実行されているため、実行されない。 -
04:21 にcron.dailyジョブが実行される。
-
05:01にanacronが起動
本日既にすべてのジョブが実行されているため、何も実行されない。
参考URL
ulimitと自動起動設定について
/etc/security/limits.confにおいて、ulimitを設定しても、
OSの自動起動によってプロセスが起動された場合、ulimitが適用されない。
(ulimitとは、PAM認証を通ったユーザへのリソース設定であるため)
起動方式によって、以下の様な対応をする。
- Systemd方式
サービスに設定する
/etc/systemd/system/<サービス名>
\[Service]
LimitNOFILE=64000
LimitNPROC=16000
LimitDATA=8000000000
- SysVinit方式
起動スクリプトにulimitを設定する。
/etc/init.d/<プロセス名>
ulimit -n 64000
ulimit -u 16000
ulimit -d 8000000000
ファイルのタイムスタンプ
Unix系のシステムは、ファイルのタイムスタンプが以下の三つある。
タイムスタンプ | 名称 | 概要 | ls による確認方法 |
---|---|---|---|
atime | access time | 最後にファイルにアクセスした時間 | ls -lu |
ctime | change time | 最後にinodeが更新された時間(ファイル内容もしくは属性が更新された場合) | ls -lc |
mtime | modify time | 最後にファイル内容が更新された時間 | ls -l |
stat コマンドを用いればファイルの属性をすべて確認できる。