LoginSignup
4
8

More than 3 years have passed since last update.

[シェルスクリプト] 毎週、同じ内容を送信するのがめんどくさいので自動化してみた!!!

Last updated at Posted at 2020-07-26

概要

毎週土曜日にもくもく勉強会を開催しているが、始まる少し前に「zoomのURLを貼り付けて、メール文章を考えてメール送信」 この作業がめんどくさい。
って事で、定型分を作成してslackに自動送信出来る様にしよう!!っていう内容になっています。

■大まかな流れ

1.ファイルを作成して実行権限を付与
2.slackにIncoming Webhookを登録して設定
3.コード作成(zoom URL + メール文章)
4.cronの設定(ジョブスケジューリング)

1.ファイルを作成して実行権限を付与

まず、プログラムを書くファイルを作成します。私は土曜日に土曜日に実行するファイルなので、shellscriptディレクトリにSaturday_executeというファイルを作成しました。(./shellscript/Saturday_executeのパスはcronの設定で使います。)
では、Saturday_executeに権限を付与していきましょ。

■ディレクトリ内のファイル情報を表示する

/shellscript
$ ls -l      #ディレクトリ内のファイル情報を表示する
-rw-r--r-- 1 ファイルの所有者名 ファイルの所属グループ ファイルサイズ 更新日時 Saturday_execute(ファイル名)

lsコマンドの使い方とオプション

表示された情報の詳細
- 左の3文字 : 所有者のアクセス権限
- 中央3文字 : 所有グループのアクセス権限
- 右の3文字 : 所有者のアクセス権限

-r:読み込み可
- w:書き込み可
- x:実行可
- -:アクセス権限なし

所有者のアクセス権限の3文字目が「-」なので、実行権限がないのが分かりますね。
実行権限がないので実行権限を与えましょう。

■実行権限の付与
権限の変更にはchmodコマンドを使用します。
chmodの使い方とオプション

/shellscript
$ chmod u+x Saturday_execute    #chmod 権限設定 ファイルパス

コマンド解説

記号 意味
u 所有者の権限

xは「■ディレクトリの情報を表示する」で説明しましたが、実行権限の事でしたね。

「Saturday_executeファイルの所有者に実行権限を付与する」という意味になります。

2. slackにIncoming Webhookを登録して設定

slackの左下に「Appの横にある+ボタン]からIncoming Webhookを検索します。
スクリーンショット 2020-07-26 11.53.54.png
「設定を追加」をクリックします
スクリーンショット 2020-07-26 12.48.02.png
通知をしたいチャンネルを選択し、「Incoming Webhook インテグレーションの追加」をクリックします。
スクリーンショット 2020-07-26 12.48.52.png
Webhook URLをコードに埋め込んで使う為コピーしておきます。
スクリーンショット 2020-07-26 12.49.01.png

これで設定完了!!

3.コード作成(zoom URL + メール文章)

Incoming WebhookのURL設定、slackの送信チャンネル、送信名、アイコン、メッセージを設定してcurlコマンドで送信する。

/shellscript/Saturday_execute
#!/bin/bash

#################################################################################
# 土曜日の朝に勉強会参加用のURLをメール送信
# 概要 : Incoming WebhookのURL設定、slackの送信チャンネル、送信名、アイコン、メッセージを設定してcurlコマンドで送信する。
# 実行日 : 毎週土曜日 9時55分
#################################################################################

#slackの「勉強会」チャンネルへ通知(Incoming WebHooksのURL)
WEBHOOKURL="コピーしたIncoming WebhookのURL"

###############################################################
#固定文文字列の作成
###############################################################
#slack 送信チャンネル
CHANNEL="#勉強会"
#slack 送信名
BOTNAME="勉強会案内のお知らせ"
#slack アイコン
FACEICON=":snail:"  #なめくじのアイコンを使用しています。設定を変更したい場合は「https://www.webfx.com/tools/emoji-cheat-sheet/」を使用。
#メッセージ内容
MESSAGE="今からもくもく勉強会を始めます。\n 下記のURLよりお入りください。\n ■時間:10時〜17時\n <zoom URL>"

curl -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}\" }" ${WEBHOOKURL}

コード内容は文字列を変数に格納してcurlコマンドで送信しているだけ!!

・基本操作が分からない方は下記を参照!
シェルスクリプトの基本コマンド
・curlコマンドの使い方が分からない方は下記を参照!
curlコマンドのオプション

4.cronの設定(ジョブスケジューリング)

ここまできたら残すは「指定の時間に指定のプログラムを実行」する設定のみ!!
■ジョブスケジューリングは、指定の時間に指定のプログラムを自動実行する機能。下記の2種類

・cron
- 定期的に自動実行
- crondとcrontabコマンドで構成
・at
- 1回だけ自動実行
- 標準入力でスクリプトを指定する

今回の実装は毎週通知なので、cronで行います。
それでは「/shellscript/Saturday_execute」ファイルを「毎週9時55分」に実行する様に設定して行きましょう。

$ crontab -e      #eオプションを付けて起動

スクリーンショット 2020-07-26 14.13.17.png

iでインサートモードに切り替えて下記を入力

crontab
# (分)(時)(日)(月)(曜日) 実行するコマンドのパス
55 9 * * sat bash ./shellscript/Saturday_execute    #毎週土曜日の9時55分「Saturday_execute」ファイルを実行

#入力後、escキー押して:wqで保存終了

escキー押して:wqで保存終了したら完成!!!

こんな感じでslackに通知が行きます。
スクリーンショット 2020-07-26 14.26.05.png

cronの詳細が分からない方は下記を参照してください。

cronで定期処理を行う
ronの書式で曜日指定に数字を使うのやめたい

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8