2015年02月20日

【備忘録】毎日自動的に休止→起動する(CentOS 6.6)

業務で使用しているサーバーなら24時間稼働が普通かと思いますが、自宅のファイルサーバーであれば、深夜や出勤中は稼働するだけ電力の無駄なので、指定した時間に自動的に休止もしくはスリープ状態になり、指定した時間に復帰してくれるとうれしいですよね。

それを実現するためにはrtcwakeコマンドをcronで決まった時間に実行すればOKです。

■rtcwakeの使い方

rtcwake --help
使い方: rtcwake [オプション]
    -d | --device <デバイス>  rtc デバイスを選択する (rtc0|rtc1|...)
    -l | --local              ローカル時間として RTC を使う
    -m | --mode               standby|mem|... sleep mode
    -s | --seconds <seconds>  指定秒スリープする
    -t | --time <time_t>      time to wake
    -u | --utc                RTC uses UTC
    -v | --verbose            メッセージを表示する
    -V | --version            バージョンを表示する

■モードの種類
オプションモードACPIステート
-m standbyスタンバイS1
-m memスリープS3
-m disk休止状態S4
-m off電源OFFS5

今回は休止状態(ハイバーネーション)にしたいので"disk"にします。
また、復帰までの時間は -s オプションを使い、秒数で指定します。

rtcwake -m disk -s 28800

上記の場合、コマンドを実行してから8時間後に復帰しますので、例えば夜0時にこのコマンドを実行すれば朝8時に自動的に復帰するわけです。
これを自動実行させるには、コマンドを記述したスクリプトファイルを作成し、それをcrondを使って指定した時間に実行させます。

■スクリプトの自動実行(ファイルの作成その他、全てroot権限で行う必要があります)
 コマンドを記述したファイルrtcwake08.shを以下の場所に作成

/usr/local/bin/rtcwake08.sh

曜日によって時間を変えたい場合は、時間指定を変更したファイルも作成しておきます。

rtcwake -m disk -s 64800

これを記述したファイルを作成
/usr/local/bin/rtcwake18.sh

実行権限を追加します。
chmod 744 /usr/local/bin/rtcwake08.sh
chmod 744 /usr/local/bin/rtcwake18.sh


■crontabの編集

vi /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin ←pathの追加
MAILTO=""←メールは不要
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

0 0 * * 1 root /usr/local/bin/rtcwake18.sh ←月曜の設定
0 0 * * 2 root /usr/local/bin/rtcwake18.sh ←火曜の設定
0 0 * * 3 root /usr/local/bin/rtcwake18.sh ←水曜の設定
0 0 * * 4 root /usr/local/bin/rtcwake18.sh ←木曜の設定
0 0 * * 5 root /usr/local/bin/rtcwake18.sh ←金曜の設定
0 0 * * 6 root /usr/local/bin/rtcwake08.sh ←土曜の設定
0 0 * * 7 root /usr/local/bin/rtcwake08.sh ←日曜の設定

今回の例では、週末(土,日)は0時から8時まで休止、平日は0時から18時まで休止という運用になっています。

記述のフォーマットは以下のようになります。

分 時 日 月 週 user コマンド

0 0 * * 1 root /usr/local/bin/rtcwake18.sh

この場合は『毎週月曜日0時0分にrtcwake18.shをrootで実行』となります。

尚、曜日は0〜7で日〜土を表します(0,7は日曜日)

以上の設定で生活スタイルに合わせたサーバー運用が可能になり、無駄な電気代もかけずにすみます(^_^)





追記です。

最初わざわざスクリプトファイルを作って実行させてましたが、1ファイルに1コマンドしか書かないなら、crontabに直接コマンド書けばいいやん・・・。
ということに気づきました。

これでOKですね。

0 0 * * 1 root rtcwake -m disk -s 64800 ←月曜の設定
0 0 * * 2 root rtcwake -m disk -s 64800 ←火曜の設定
0 0 * * 3 root rtcwake -m disk -s 64800 ←水曜の設定
0 0 * * 4 root rtcwake -m disk -s 64800 ←木曜の設定
0 0 * * 5 root rtcwake -m disk -s 64800 ←金曜の設定
0 0 * * 6 root rtcwake -m disk -s 28800 ←土曜の設定
0 0 * * 7 root rtcwake -m disk -s 28800 ←日曜の設定

複数の処理をさせたい場合はスクリプトにした方がいいですが、今回の場合のように一回に1つの処理しかしないなら直接コマンド書いた方が楽ですね。


ラベル:CentOS
posted by やおちん at 19:01| Comment(0) | パソコン | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。