全般

cronで動かすときの注意点

デバッグ

以下のように実行すると、実際に実行されたコマンドと変数に設定された値を確認できる。

$ bash -x test.sh

例外処理

ファイル関連

ファイルの情報参照

$ stat aaa
  File: `aaa'
  Size: 4               Blocks: 8          IO Block: 4096   通常ファイル
Device: 806h/2054d      Inode: 94404618    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  222/   adpsp)   Gid: (  222/   adpsp)
Access: 2010-11-23 12:20:38.000000000 +0900
Modify: 2010-11-23 12:20:25.000000000 +0900
Change: 2010-11-23 12:20:25.000000000 +0900

更新日時

ログ圧縮

指定ディレクトリ内の日付のディレクトリを圧縮したファイルを生成し、ディレクトリを削除(デフォルトは3日前)

#!/bin/bash

DIR=/var/aplication/log
FROM_DATE=`date --date '3 day ago' +%Y-%m-%d`
TO_DATE=`date --date '3 day ago' +%Y-%m-%d`

while getopts 'd:f:t:' OPTION
do
        case $OPTION in
        d)      DIR="$OPTARG"
                ;;
        f)      FROM_DATE="$OPTARG"
                ;;
        t)      TO_DATE="$OPTARG"
                ;;
        ?)      printf "Usage: %s: -a aid [-d DIR] [-f FROM_DATE] [-t TO_DATE] args\n" $(basename $0) >&2
                exit 2
                ;;
        esac
done

target=$FROM_DATE
target_s=`date --date "$target" '+%s'`
to_s=`date --date "$TO_DATE" '+%s'`

if [ ! -d $DIR ]; then
        echo "not found: $DIR"
        exit
fi
cd $DIR

until [ $target_s -gt $to_s ];
do
        echo $target

        if [ -d $target ]; then
                tar cfz $target.tar.gz $target
                STATUS=$?
                if [ $STATUS = 0 ];then
                        rm -rf $target
                fi
        fi

        target=`date --date "$target 1 day" +%Y-%m-%d`
        target_s=`date --date "$target" '+%s'`
done

メール送信

mail コマンド使用

sendmail コマンド使用

Tips

日付

文字コード変換

その他


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS