GUiLZ Project Personal & Experimental Blog
このエントリーをはてなブックマークに追加
はてなブックマーク - 自動で日報メールを送るシェルスクリプトを書いた(LAW Version)
Facebook にシェア
[`evernote` not found]

やあ、俺だ。今回はなぜこんなスクリプトを書いたのか、その理由からお話ししよう。

スポンサードリンク

あらすじ

比較的自由であった、完全成果主義の在宅勤務生活を送っていた俺だったが、日々の日報的な報告メールを送らなければいけないルールができてしまい、それまでの日々は一転、地獄へと変わった。一言で言うなら覇王丸地獄変ってヤツだ。

自由という翼をもがれた俺は、ただ大地へと倒れ伏すしかないのか。青天の霹靂。つんざく轟音の中で、俺は気づいた。

「まだだ・・・。まだ、俺は、心までは折られちゃいない・・・」

要するに

定型文とか書くの面倒だし、メール送信し忘れとか、眠かったりしたら無かったことにしてしまいそうなので(既に何回か無かったことにした)、俺の給与や評価や信用といった生きていく上で守らないとマイナスなものを守るために、スクリプト書いてやらせることにした。

スクリプトの方針

  • cron で指定時間に回すことで送信忘れを回避したい
  • 定型文を組み込んでおいて、内容だけを都度更新したい
  • 決まったディレクトリに、テキストファイルを放り込むだけでOKにしたい

こんなスクリプトになった

#!/bin/sh

# 送信先・送信元・BCC・サブジェクト設定
toaddress='to@example.com'
fromaddress='\"My Name\"'
bccaddress='from@example.com'
subject=`date +'%m月%d日'`の日報

# 定型文の内容(上部)
teikei1="
本文前の定型文です。
上と下の不自然な改行は、改行ごと内容を送るための整形です。整形するの面倒だったのでこんな感じで。

"

# 報告書・定型内容(下部)
teikei2="

本文あとの定型文です。
署名とか何なりと入れる感じで。
"


# 作業内容記載ファイル取得
todaysagyou=/tmp/work/`date +'%Y%m%d'`.txt

# 作業内容記載ファイルがなければエラーを返し、終了する
if [ ! -f ${todaysagyou} ]; then
    echo "作業ファイルがありません"
    exit

# 作業ファイルがあれば、処理を続行
else

    # 作業内容記載ファイルを文字コード変換
    nkf -w -Lu --overwrite ${todaysagyou}

    # 一時ファイルの設定と作成
    tmpfile=/tmp/sagyoumail`date +'%Y%m%d'`.txt

    if [ ! -f ${tmpfile} ]; then
        touch ${tmpfile}
    fi

    # メールヘッダを一時ファイルに挿入
    echo "From: ${fromaddress}" >> ${tmpfile}
    echo "To: ${toaddress}" >> ${tmpfile}
    echo "Bcc: ${bccaddress}" >> ${tmpfile}
    echo "Subject: ${subject}" >> ${tmpfile}

    # メールの定型文(上部)を挿入。変数を$から "" で囲んで改行を有効にする
    echo "${teikei1}" >> ${tmpfile}

    # 作業内容ファイルから1行ずつ抜き出して一時ファイルに挿入
    cat ${todaysagyou} | while read line
    do
        echo ${line} >> ${tmpfile}
    done

    # メールの定型文(下部)を挿入。変数を$から "" で囲んで改行を有効にする
    echo "$teikei2" >> ${tmpfile}

    # メール送信
    /usr/lib/sendmail -t < ${tmpfile}

    # 一時ファイルを消す
    rm ${tmpfile}

fi

# 終了
exit

解説とか

todaysagyou 変数で指定されたファイルを読んで、上と下に定型文をくっつけて、toaddress 変数で指定したメールアドレスにメールを送るだけのスクリプト。一応 todaysagyou 変数で指定したファイルが存在しないと終了するようにしているので、もしアップ忘れてたりしてもメールは飛ばない安心仕様。

todaysagyou 変数で指定しているファイル名は、今日の日付を付けたファイル名になる。例えば2012年10月19日の日報なら、/tmp/work/20121019.txt というファイル名にする。面倒なら適当なファイル名をフルパスで指定して、そのファイルを編集すればOK。

sendmail と nkf が必要。まず入ってるとは思うけど、さくらのVPSでは標準でnkfは入ってなかったので注意。

前提として、bash な CentOS(ファイルシステムの文字コードがUTF-8) という環境を元に作ってるので、違う環境の場合は文字コード変換をやってる部分を変更する必要があるかも。

cron への登録

crontab -e

して、以下のような感じで登録してやる。

00 23 * * 1-5 /home/xxx/script.sh

この例では月?金の23時に、/home/xxx/script.sh ってスクリプトを実行する。お好みで終業時間等に設定してやればいい感じ。

実際の運用

ftpなりsftpなりrsyncなりターミナルで直接編集なり、好きな手段でテキストファイルを編集して(cron が回るまでに) 置いておけばOKという、シンプルすぎるスクリプトなので、特に難しいこともないかなと。

最後に

今回は LAW 版だったが、LAW があればもちろん CHAOS もあるわけで、次回はそちら版のスクリプトを紹介したい。内容はできてるし動作確認もしてるけど、もうちょっと使い勝手よくした方がいいかなーということで検討中。

それではまた。

スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。

当サイトのコメント欄は承認制となっております。また、日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

スポンサードリンク

Twitter
利用中のサービス

GUiLZ Project では、以下のサービスを利用しています。


関連サイト
巡回先サイト様
アーカイブ