Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2833

SQLの実行結果をメールするだけのシェルスクリプト

$
0
0

掲題の通り。
昼休みにちょっと書いてみた。

環境

Azure VMインスタンスの PostgreSQL を使用。

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)$ psql -V
psql (PostgreSQL) 9.2.23

コード

本当は Python で書きたかったが、現行モジュール構成では環境を弄らなければならなかった。
本番システムなのでそれは断念し、シェルスクリプト(bash)と標準コマンドのみで作成。

bash
#!/bin/bashYESTERDAY=`date--date'1 day ago'"+%Y%m%d"`MAIL_TEXT=/tmp/mail.txt

# SQL文を /tmp に作成cat<<EOL> /tmp/dakoku.sql
SELECT d.syaincd as 従業員番号, e.syainmei as 従業員名, d.torokudt as 打刻日時,
CASE dakokusyubetucd
  WHEN '1' THEN '出勤'
  WHEN '2' THEN '退勤'
  ELSE '不明'
END as 種別
FROM dakoku_table d
LEFT JOIN employee_table e ON d.syaincd = e.syaincd
WHERE dakokuymd = '$YESTERDAY'
ORDER by d.torokudt, d.syaincd;
EOL

# メールヘッダ等を /tmp に作成cat<<EOL> $MAIL_TEXT
To: foo@example.co.jp
Cc: bar@example.co.jp
Subject: DAILY TIME RECORD ($YESTERDAY)

本メールはシステムから自動送信しています。
勤怠打刻ログをお知らせします。

EOL

# SQLの実行結果をメール本文に追加
su - postgres -c'psql KINTAI_DB < /tmp/dakoku.sql'>>$MAIL_TEXT# メールを送信
/sbin/sendmail -t< $MAIL_TEXT
送信されるメール
本メールはシステムから自動送信しています。
勤怠打刻ログをお知らせします。

 従業員番号 |   従業員名   |        打刻日時         | 種別
------------+--------------+-------------------------+------
     539258 | 山田 太郎   | 2020-07-17 07:47:05.314 | 出勤
     265167 | 鈴木 花子   | 2020-07-17 07:52:18.736 | 出勤
     329665 | 田中 一郎   | 2020-07-17 08:03:57.356 | 出勤

root のcrontabに登録し、午前0時05分に自動実行。前日の勤怠打刻漏れを人事総務部がチェックできるようにした。
しょうもないコードだけど、誰かの参考になれば!


Viewing all articles
Browse latest Browse all 2833

Latest Images

Trending Articles