LoginSignup
2
3

More than 5 years have passed since last update.

DRBD環境におけるcron設定共通化

Posted at

heartbeatで切替しているDRBD構成のサーバで、
cron設定についても共通化したいという要望について調査と対応。

cronの実体は/var/spool/cron以下のファイルなので
まず、これをDRBDの対象ディレクトリ内部に含む形にして
シンボリックリンク化する。

DRBDの対象ディレクトリを/dataとした際に、
/var/spool/cronを/data/cron_spoolのシンボリックリンクとした。

mkdir -p /data/cron_spool
cp /var/spool/cron/* /data/cron_spool/
chmod 700 /data/cron_spool/
mv /var/spool/cron /var/spool/cron.bk
ln -s /data/cron_spool /var/spool/cron

こちらを参考にしつつ、heartbeatから呼び出すスクリプトについて修正した。

/etc/ha.d/haresources
#!/bin/bash
# get functions
. /etc/init.d/functions
# See how we were called.
case "$1" in
  start)
    rm -rf /var/spool/cron
    ln -s /data/cron_spool /var/spool/cron

    for textfile in $( ls /var/spool/cron ); do
        logger -s -t "${textfile}" "setting up root crontab" 
        /usr/bin/crontab -u ${textfile} /var/spool/cron/${textfile}
    done

    echo
  ;;
  stop)
    logger -s "change crontab dir" 
    rm -rf /var/spool/cron
    ln -s /var/spool/cron.bk /var/spool/cron

    for textfile in $( ls /var/spool/cron ); do
        logger -s -t "${textfile}" "setting up ${textfile} crontab" 
        /usr/bin/crontab -u ${textfile} /var/spool/cron/${textfile}
    done
    echo
  ;;
  status)
    for textfile in $( ls /var/spool/cron ); do
            echo "$0 status: " 
            echo "crontab -u ${textfile} -l:" 
            crontab -u root -l
    done
    ;;
  *)
    echo "Usage $0 (start|stop|status)" 
    ;;
esac
exit 0

変更ポイントは、
1. シンボリックリンクの張り替え
2. root以外のユーザcronへの対応
となる。

非アクティブ時にわざわざcron.bkにシンボリックリンクを張り替えているが、
これは非アクティブ時にも実行して欲しいcronがあること(時刻合わせとかね)
また、/var/spool/cronの実体が存在しない状態で、シンボリックリンクだけが
残っている場合に、crondが起動しないことがあることが理由。

2
3
0

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
2
3