005_Redmine4.2/Redmine 5.1のリマインダーを利用する。
バージョン 6 (手動人形, 2023/12/07 09:54) → バージョン 7/7 (手動人形, 2024/10/15 09:18)
{{TOC}}
### ## 概要
Redmineにはデフォルトでチケットの期日まで何日かメールで通知する機能が備わっています。
これにより、
- 作成したチケットの処理忘れを防ぐ
- 定期作業など、開始日が定まっているチケットを事前に把握する
ことが可能になります。
本記事では、この機能を有効化するシェルスクリプトを記します。 本記事では、この機能を有効化するとともに、これに必要なLinuxサーバの設定についても記します。
### ## 環境
以下の環境で動いていることを確認しています。
- Ubuntu 20.04系Linux
- Ubuntu22.04でも動くことを確認
- Redmine 4.2
- Redmine5.0/5.1でも動くことを確認
### 前提
この作業の前に、以下が必須です。
- Redmineでメール通知が有効になっていること
- (Gmailとの連携方法については以下で案内しています)
- [https://barrel.reisalin.com/books/redmine/page/redmine425xgmail](https://barrel.reisalin.com/books/redmine/page/redmine425xgmail)
- サーバ上で[Cronログが有効化されている](https://barrel.reisalin.com/books/linux/page/ubuntu-linuxcron)こと。
- 必須ではありませんが、運用上ログが有効化されていると心強いです。 https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/22
## 実施した手順
本作業はRedmineのWeb上で作業をしません。全て稼働サーバのSSHで操作を行います。
### さっくりとした手順
1. Linuxのrsyslog設定でcronログを有効にします。
2. リマインダースクリプトを作成して実行権限を付与します。
1. 3. cronで定期実行されるようにします。
### rsyslogdでCronログの有効化
#### リマインダースクリプトの作成 設定ファイルのバックアップ取得
```bash
sudo cp -pi /etc/rsyslog.d/50-default.conf /path/to/backup/directory/50-default.conf.$(date +%Y%m%d)
diff -u /etc/rsyslog.d/50-default.conf /path/to/backup/directory/50-default.conf.$(date +%Y%m%d)
# 差分が無いことでバックアップが取れていることを確認します。
```
#### 設定ファイルの書き換え
```bash
sudo sed -i 's/^#cron.*/cron.* \/var\/log\/cron.log/' /etc/rsyslog.d/50-default.conf
```
- スクリプト格納ディレクトリを作成 ○差分確認
```bash
mkdir /home/hoge/scripts diff -u /path/to/backup/directory/50-default.conf.$(date +%Y%m%d) /etc/rsyslog.d/50-default.conf
```
任意のディレクトリを指定します。
- スクリプト格納ディレクトリに移動 ●差分
```diff
-#cron.* /var/log/cron.log
+cron.* /var/log/cron.log
```
#### rsyslogd反映
```bash
systemctl status rsyslog.service
# active (running)を確認します
sudo systemctl restart rsyslog.service
systemctl status rsyslog.service
# active (running)を確認します
```
### リマインダースクリプトの作成
#### スクリプト格納ディレクトリを作成して移動します。
```bash
mkdir /home/hoge/scripts
# ログインユーザー名配下がメンテナンスしやすいです
cd /home/hoge/scripts && pwd
# 作成したディレクトリにいることを確認します
```
#### リマインダースクリプトを作成します。
【】内は自分の環境に合わせ、書き換えてからコマンドを実行します。(詳細をコメントで書いています)
```bash
cat <<- __EOF__ | tee -a redmine_reminder.sh redmine_reminder_3days.sh
#!/bin/bash #!/bin/sh
# Redmineのルートディレクトリを変数化 SHELL=/bin/sh
REDMINE_ROOT=【"/home/www-data/redmine"】 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 引数で日数を指定(デフォルトは3日) cd 【/var/lib/redmine】
DAYS=${1:-3}
# Redmineのルートディレクトリに移動 自分が格納しているRedmineのルートディレクトリ
cd $REDMINE_ROOT
# リマインダーを送信
bundle exec rake redmine:send_reminders days=$DAYS days=3 RAILS_ENV=production
# この例では3日前に通知します。days=nの部分を変えることで日数を指定できます
__EOF__
```
筆者は、
- 1日前 (redmine_reminder_1day.sh)
- 3日前 (redmine_reminder_3days.sh)
- 7日前 (redmine_reminder_7days.sh)
- 31日前 (redmine_reminder_31days.sh)
の4種類を作成し、それぞれの期日にメールを送付するようにしています。
#### スクリプトに実行権限を付与し、動作を確認します。
- 実行権付与 ★実行権付与
```bash
chmod +x redmine_reminder.sh && redmine_reminder_*day*.sh
ls -l redmine_reminder.sh redmine_reminder_*day*.sh
# 実行権限がついていることを確認します
```
実行権がついていることを確認します
- 動作確認 ★動作確認
```bash
sudo -u www-data bash /home/hoge/scripts/redmine_reminder.sh sh /home/hoge/scripts/redmine_reminder_3days.sh
# warningは今のところは無視して大丈夫です
```
warningは無視して大丈夫です
締め切りが3日に到来するチケット一覧のメールが受信されれば成功です。
### crontabに追加
#### 現行のcrontab確認
```bash
sudo crontab -l -u www-data
```
- ●結果確認
```bash
no crontab for www-data
```
と出ていることを確認します。
#### crontab追記
```bash
sudo crontab -e -u www-data
```
- ※注意事項
初めてこのコマンドを実行した場合、「crontabで用いるエディタは何か」を確認されます。自分の信仰や教義に合わせたエディタを選択してください。
- ##### 追記例
```bash
# リマインドしたい日数を引数で指定できます
20 8 * * * /home/hoge/scripts/redmine_reminder.sh 31 /home/hoge/scripts/redmine_reminder_31days.sh
30 8 * * * /home/hoge/scripts/redmine_reminder.sh 1 /home/hoge/scripts/redmine_reminder_1day.sh
30 16 * * * /home/hoge/scripts/redmine_reminder.sh 7 /home/hoge/scripts/redmine_reminder_7days.sh
40 16 * * * /home/hoge/scripts/redmine_reminder.sh 1 /home/hoge/scripts/redmine_reminder_1day.sh
20 20 * * * /home/hoge/scripts/redmine_reminder.sh 3 /home/hoge/scripts/redmine_reminder_3days.sh
30 20 * * * /home/hoge/scripts/redmine_reminder.sh 1 /home/hoge/scripts/redmine_reminder_1day.sh
```
この例では、
- 8:20 → 31日前に期日が到来する担当チケット
- 8:30 → 1日前に期日が到来する担当チケット
- 16:30 → 7日前に期日が到来する担当チケット
- 16:40 → 1日前に期日が到来する担当チケット
- 20:20 → 3日前に期日が到来する担当チケット
- 20:30 → 1日前に期日が到来する担当チケット
をそれぞれ通知します。
#### 追記確認
- crontab ★crontab 追記確認
```bash
sudo crontab -l -u www-data
```
追記した内容があることを確認します。
- cronログ ★cronログ 設定確認
```bash
cat /var/log/cron.log
```
- BEGIN EDIT (www-data)
- REPLACE (www-data)
- END EDIT (www-data)
が、crontabに追記した時間帯にあれば設定完了です。
後は、指定した時間にメールが通知されることを待ちましょう。(キチッと確認したい場合は、cronの実行時刻を調整してください)
### ## 概要
Redmineにはデフォルトでチケットの期日まで何日かメールで通知する機能が備わっています。
これにより、
- 作成したチケットの処理忘れを防ぐ
- 定期作業など、開始日が定まっているチケットを事前に把握する
ことが可能になります。
本記事では、この機能を有効化するシェルスクリプトを記します。 本記事では、この機能を有効化するとともに、これに必要なLinuxサーバの設定についても記します。
### ## 環境
以下の環境で動いていることを確認しています。
- Ubuntu 20.04系Linux
- Ubuntu22.04でも動くことを確認
- Redmine 4.2
- Redmine5.0/5.1でも動くことを確認
### 前提
この作業の前に、以下が必須です。
- Redmineでメール通知が有効になっていること
- (Gmailとの連携方法については以下で案内しています)
- [https://barrel.reisalin.com/books/redmine/page/redmine425xgmail](https://barrel.reisalin.com/books/redmine/page/redmine425xgmail)
- サーバ上で[Cronログが有効化されている](https://barrel.reisalin.com/books/linux/page/ubuntu-linuxcron)こと。
- 必須ではありませんが、運用上ログが有効化されていると心強いです。 https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/22
## 実施した手順
本作業はRedmineのWeb上で作業をしません。全て稼働サーバのSSHで操作を行います。
### さっくりとした手順
1. Linuxのrsyslog設定でcronログを有効にします。
2. リマインダースクリプトを作成して実行権限を付与します。
1. 3. cronで定期実行されるようにします。
### rsyslogdでCronログの有効化
#### リマインダースクリプトの作成 設定ファイルのバックアップ取得
```bash
sudo cp -pi /etc/rsyslog.d/50-default.conf /path/to/backup/directory/50-default.conf.$(date +%Y%m%d)
diff -u /etc/rsyslog.d/50-default.conf /path/to/backup/directory/50-default.conf.$(date +%Y%m%d)
# 差分が無いことでバックアップが取れていることを確認します。
```
#### 設定ファイルの書き換え
```bash
sudo sed -i 's/^#cron.*/cron.* \/var\/log\/cron.log/' /etc/rsyslog.d/50-default.conf
```
- スクリプト格納ディレクトリを作成 ○差分確認
```bash
mkdir /home/hoge/scripts diff -u /path/to/backup/directory/50-default.conf.$(date +%Y%m%d) /etc/rsyslog.d/50-default.conf
```
任意のディレクトリを指定します。
- スクリプト格納ディレクトリに移動 ●差分
```diff
-#cron.* /var/log/cron.log
+cron.* /var/log/cron.log
```
#### rsyslogd反映
```bash
systemctl status rsyslog.service
# active (running)を確認します
sudo systemctl restart rsyslog.service
systemctl status rsyslog.service
# active (running)を確認します
```
### リマインダースクリプトの作成
#### スクリプト格納ディレクトリを作成して移動します。
```bash
mkdir /home/hoge/scripts
# ログインユーザー名配下がメンテナンスしやすいです
cd /home/hoge/scripts && pwd
# 作成したディレクトリにいることを確認します
```
#### リマインダースクリプトを作成します。
【】内は自分の環境に合わせ、書き換えてからコマンドを実行します。(詳細をコメントで書いています)
```bash
cat <<- __EOF__ | tee -a redmine_reminder.sh redmine_reminder_3days.sh
#!/bin/bash #!/bin/sh
# Redmineのルートディレクトリを変数化 SHELL=/bin/sh
REDMINE_ROOT=【"/home/www-data/redmine"】 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 引数で日数を指定(デフォルトは3日) cd 【/var/lib/redmine】
DAYS=${1:-3}
# Redmineのルートディレクトリに移動 自分が格納しているRedmineのルートディレクトリ
cd $REDMINE_ROOT
# リマインダーを送信
bundle exec rake redmine:send_reminders days=$DAYS days=3 RAILS_ENV=production
# この例では3日前に通知します。days=nの部分を変えることで日数を指定できます
__EOF__
```
筆者は、
- 1日前 (redmine_reminder_1day.sh)
- 3日前 (redmine_reminder_3days.sh)
- 7日前 (redmine_reminder_7days.sh)
- 31日前 (redmine_reminder_31days.sh)
の4種類を作成し、それぞれの期日にメールを送付するようにしています。
#### スクリプトに実行権限を付与し、動作を確認します。
- 実行権付与 ★実行権付与
```bash
chmod +x redmine_reminder.sh && redmine_reminder_*day*.sh
ls -l redmine_reminder.sh redmine_reminder_*day*.sh
# 実行権限がついていることを確認します
```
実行権がついていることを確認します
- 動作確認 ★動作確認
```bash
sudo -u www-data bash /home/hoge/scripts/redmine_reminder.sh sh /home/hoge/scripts/redmine_reminder_3days.sh
# warningは今のところは無視して大丈夫です
```
warningは無視して大丈夫です
締め切りが3日に到来するチケット一覧のメールが受信されれば成功です。
### crontabに追加
#### 現行のcrontab確認
```bash
sudo crontab -l -u www-data
```
- ●結果確認
```bash
no crontab for www-data
```
と出ていることを確認します。
#### crontab追記
```bash
sudo crontab -e -u www-data
```
- ※注意事項
初めてこのコマンドを実行した場合、「crontabで用いるエディタは何か」を確認されます。自分の信仰や教義に合わせたエディタを選択してください。
- ##### 追記例
```bash
# リマインドしたい日数を引数で指定できます
20 8 * * * /home/hoge/scripts/redmine_reminder.sh 31 /home/hoge/scripts/redmine_reminder_31days.sh
30 8 * * * /home/hoge/scripts/redmine_reminder.sh 1 /home/hoge/scripts/redmine_reminder_1day.sh
30 16 * * * /home/hoge/scripts/redmine_reminder.sh 7 /home/hoge/scripts/redmine_reminder_7days.sh
40 16 * * * /home/hoge/scripts/redmine_reminder.sh 1 /home/hoge/scripts/redmine_reminder_1day.sh
20 20 * * * /home/hoge/scripts/redmine_reminder.sh 3 /home/hoge/scripts/redmine_reminder_3days.sh
30 20 * * * /home/hoge/scripts/redmine_reminder.sh 1 /home/hoge/scripts/redmine_reminder_1day.sh
```
この例では、
- 8:20 → 31日前に期日が到来する担当チケット
- 8:30 → 1日前に期日が到来する担当チケット
- 16:30 → 7日前に期日が到来する担当チケット
- 16:40 → 1日前に期日が到来する担当チケット
- 20:20 → 3日前に期日が到来する担当チケット
- 20:30 → 1日前に期日が到来する担当チケット
をそれぞれ通知します。
#### 追記確認
- crontab ★crontab 追記確認
```bash
sudo crontab -l -u www-data
```
追記した内容があることを確認します。
- cronログ ★cronログ 設定確認
```bash
cat /var/log/cron.log
```
- BEGIN EDIT (www-data)
- REPLACE (www-data)
- END EDIT (www-data)
が、crontabに追記した時間帯にあれば設定完了です。
後は、指定した時間にメールが通知されることを待ちましょう。(キチッと確認したい場合は、cronの実行時刻を調整してください)