1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-19

深夜に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してるとデスクトップに通知が来るのを確認して満足しました。
変なこと書いてたら指摘してくださるとうれしいです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?