Help us understand the problem. What is going on with this article?

深夜にDockerコンテナ使ってるとslack経由でデスクトップに通知が届くようにしてみた

深夜にdocker-compose up -dしてるとデスクトップに「GO TO BED」と通知が来るようにしてみました。

cronを稼働させるためのコンテナを用意し、自動的にcurlコマンドでのslack投稿を行うようにすることで実装しています。お試しで作ったので実用性は低いです。

cronとは

指定したコマンドやシェルスクリプト等を日時指定で自動実行するための常駐プログラム(デーモンプロセス)。

内部では、1分毎に起動、/etc/crontab などに置かれているcrontabファイルを調査、該当する時刻の場合処理を実行、という処理が行われているようです。
crontabファイルの置き場所やデーモンとして起動するか否かなど、細かい違いがあるようですが今回そこまでは調べてません。

設計

docker-compose.ymlにcron稼働用のコンテナを追加し cron -f コマンドでcronタスクを常駐させるだけです。

slack側でWebhookの設定

slack側で Incoming Webhook を設定して、HTTPリクエストでslack投稿できるようにします。
なお、 Incoming Webhook は認証がないのでURLが漏れると悪意のあるユーザーからも投稿できるようになってしまいます。

実際の手順については、以下を参考にさせていただきました。
参考:SlackのWebhook URL取得手順

URLを取得したらcurlコマンドで投稿できるか確認してみましょう。

curl -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"testuser\", \"text\": \"Hello\"}" https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

実装

深夜0時から6時まで、5分毎に「GO TO BED」と投稿されるようにしてみました。

構成
.
├ cron_alert/
│  └ Dockerfile
│  └ midnight_alert.sh
└ docker-compose.yml
docker-compose.yml
cron:
  build: ./cron_alert
  volumes:
    - ./cron_alert:/cron_dir
  ports:
    - "3456:3456"
Dockerfile
FROM ubuntu:latest

# TimeZone設定
ENV TZ Asia/Tokyo
RUN DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y cron sudo curl vim tzdata

RUN echo '*/5 0-6 * * * root /cron_dir/midnight_alert.sh' >> /etc/crontab

CMD ["cron", "-f"]
midnight_alert.sh
#!/bin/sh

CHANNEL="#general"
USERNAME="webhookbot"
TEXT="GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED   GO TO BED"
PAYLOAD="payload={\"channel\": \"$CHANNEL\", \"username\": \"$USERNAME\", \"text\": \"$TEXT\"}"

curl -X POST --data-urlencode "${PAYLOAD}" https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

参考:Docker コンテナ内でタスクを cron 起動する
参考:Dockerコンテナのタイムゾーン変更方法

最後に

深夜にdocker-compose up -dしてるとデスクトップに通知が来るのを確認して満足しました。
変なこと書いてたら指摘してくださるとうれしいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした