設問4:コマンドを定期的に自動実行させよう!

CodeIQに投稿した設問4の解答を説明します。

問題

cron でユーザーのディスク使用量管理

管理しているサーバーの全ユーザーのディスク使用状況を知りたいと思い、毎日定時にディスク使用量をログを取ることにしました。

UNIX のcron 機能 を使って、定期的に各ユーザーのディスク使用量の情報を取得する設定をしてください。

詳細は以下の通りです。

・/home の下にある全ユーザーのディレクトリ内の使用量をdu を使って求めてください。

・毎日23:30に情報を取得してください。

・ファイルは、/var/lib/bak に保存し、名前はdu-YYYYMMDD.log のようにしてください。

 例えば、2013年4月31日ならば、/var/lib/bak/du-20130431.log となります。

 日付の生成にはdateコマンドを使ってください。

・crontab -e で編集し、設定は crontab -e 内の一行のみで実現させてください。

 他のスクリプトファイルを読みに行くようなことはしないでください。

・使用するシェルはbashです。

【解答方法】

crontab -l の表示結果をテキストファイルに貼り付けて、そのテキストファイルをアップロードしてください。

解答

問題のプログラムのポイントは以下の3点です。

1. cronによるコマンド自動実行の理解

2. du, dateのオプションの理解

3. シェルのコマンド展開機能の理解

解答例

30 23 * * * du -s /home/* > /var/lib/bak/du-`date +"\%Y\%m\%d"`.log

dateコマンドの展開部分が難しいです。

bashスクリプト実行では、`date +”%Y%m%d”`でコマンドの展開がうまく行きますが、cronの中ではフォーマットの%\でエスケープしないと正常に動作しないです。

下記のURLも参考にしてください。

http://maruta.be/intfloat_staff/67

/var/libは管理者権限があり、実際のコマンド実行には、/var/lib/bakにユーザーの書き込み権限を与える必要があります。

広告

「設問4:コマンドを定期的に自動実行させよう!」への1件のフィードバック

  1. 川頭様こんにちは。お返事ありがとうございます。tailコマンドにつきましてはお手数でなければFreeBSDのjman検索サービスがありますので、こちらで確認することができます。http://www.jp.freebsd.org/man-jp/search.htmlまたUNIXの部屋でもBSD tailページ下の方の「小技」という欄に書いてあります。&&は成功したら次のコマンド、||は失敗したら次のコマンドという意味になります。コマンドをつなげる時はこの要素はとても重要です。(と思います)/var/lib/bakより/var/logの方が個人的に気が楽になりますね。/var/libだと「えっ、こういうのそこに入れちゃっていいの?」ということで一瞬戸惑いました。/var/logに対して、既に同名のファイルがないかどうかを[ -e ]あたりで確認して書き込ませるとか。そんな感じが良いように感じます。Ubuntuにはtail +オプションはないということで勉強になりました。ありがとうございます。Ubuntuは私もVMware上で使っています。Xのインターフェイスは綺麗でとてもいいですね。UDFボリュームにwriteアクセスできるのが非常に魅力的です。細かいことで反論してしまって失礼しました。採点を受ける立場ということで、「それは間違い」と言われてしまうとどうしても言いたくなってしまって、、また問題出されることを楽しみにしております。お邪魔しました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中