# 発掘調査報告書: legacy01

**調査日**: 2026-07-11 10:08 / **調査主体**: 運用考古学エージェント (deterministic core v0)

## 発掘サマリー

定期実行サイト **19 件** を発掘。特記事項 **10 件** (要対応 5 / 注意 5)。

## 遺物目録 (定期実行機構)

| 状態 | 種別 | スケジュール | 実体 | 詳細 |
|---|---|---|---|---|
| ✅ 稼働中 | user-crontab | `30 3 * * *` | `/opt/uriage/bin/daily_aggregate.sh` | 最終実行 2026-07-10 03:30 (syslog に 30 回) |
| ⚠️ 毎回失敗 | user-crontab | `15 4 * * *` | `/opt/uriage/bin/report_mail.sh` | 直近の自己ログが ERROR (2026-07-10) |
| 🧟 ゾンビ | user-crontab | `0 5 1 * *` | `/opt/uriage/bin/monthly_archive.sh` | cron は起動し続けている (最終 2026-07-01) が、実作業の痕跡は 2024-07-01 が最後 (729日前) |
| ✅ 稼働中 | user-crontab | `*/10 * * * *` | `/home/tanaka/bin/check_disk.sh` | 最終実行 2026-07-11 01:40 (syslog に 289 回) |
| ✅ 稼働中 | user-crontab | `0 6 * * 1` | `/home/tanaka/bin/weekly_cleanup.sh` | 最終実行 2026-07-06 06:00 (syslog に 4 回) |
| ❓ 実行履歴なし | etc-cron | `17 *	* * *` | `cd` | syslog に一度も現れない |
| ❓ 実行履歴なし | etc-cron | `25 6	* * *` | `test` | syslog に一度も現れない |
| ❓ 実行履歴なし | etc-cron | `47 6	* * 7` | `test` | syslog に一度も現れない |
| ❓ 実行履歴なし | etc-cron | `52 6	1 * *` | `test` | syslog に一度も現れない |
| ✅ 稼働中 | etc-cron | `0 1 * * *` | `/opt/uriage/bin/db_backup.sh` | 最終実行 2026-07-11 01:00 (syslog に 31 回) |
| ❓ 実行履歴なし | etc-cron | `30 3 * * 0` | `test` | syslog に一度も現れない |
| ❓ 実行履歴なし | etc-cron | `10 3 * * *` | `test` | syslog に一度も現れない |
| ❌ 参照切れ | etc-cron | `45 2 * * *` | `/opt/scripts/sync_legacy.sh` | スクリプトが存在しないのに cron が起動し続けている (最終 2026-07-10 02:45, 30 回) |
| ❓ 実行履歴なし | cron-periodic | `@daily (run-parts)` | `/etc/cron.daily/apt-compat` | syslog に一度も現れない |
| ❓ 実行履歴なし | cron-periodic | `@daily (run-parts)` | `/etc/cron.daily/dpkg` | syslog に一度も現れない |
| ❓ 実行履歴なし | cron-periodic | `@daily (run-parts)` | `/etc/cron.daily/logrotate` | syslog に一度も現れない |
| ❓ 実行履歴なし | systemd-timer | `*-*-* 05:30:00` | `/usr/local/sbin/tmp_cleanup.sh` | syslog に実行記録がない |
| ✅ 稼働中 | rc.local | `@reboot (起動時)` | `/opt/uriage/bin/queue_worker.sh` | プロセスが現在も稼働している |
| ℹ️ フック | logrotate-hook | `ログローテート時 (weekly)` | `/opt/uriage/bin/rotate_hook.sh` | ログローテートのたびに実行される |

根拠 (遺物目録):

- `/opt/uriage/bin/daily_aggregate.sh` (✅ 稼働中) — 設定: `/var/spool/cron/crontabs/root` / `/var/log/syslog` 「2026-07-10T03:30:01.277746+00:00 legacy01 CRON[25411]: (root) CMD (/opt/uriage/bin/daily_aggregate.sh >> /v...」
- `/opt/uriage/bin/report_mail.sh` (⚠️ 毎回失敗) — 設定: `/var/spool/cron/crontabs/root` / `/var/log/syslog` 「2026-07-10T04:15:01.277746+00:00 legacy01 CRON[19394]: (root) CMD (/opt/uriage/bin/report_mail.sh)」、`/var/log/uriage/report_mail.log` 「2026-07-10 04:15:02 ERROR: mail command failed」
- `/opt/uriage/bin/monthly_archive.sh` (🧟 ゾンビ) — 設定: `/var/spool/cron/crontabs/root` / `/var/log/syslog` 「2026-07-01T05:00:01.000000+00:00 legacy01 CRON[5288]: (root) CMD (/opt/uriage/bin/monthly_archive.sh)」、`/var/log/uriage/monthly_archive.log` 「2024-07-01 05:00:03 archive done」
- `/home/tanaka/bin/check_disk.sh` (✅ 稼働中) — 設定: `/var/spool/cron/crontabs/tanaka` / `/var/log/syslog` 「2026-07-11T01:40:01.000000+00:00 legacy01 CRON[24468]: (tanaka) CMD (/home/tanaka/bin/check_disk.sh)」
- `/home/tanaka/bin/weekly_cleanup.sh` (✅ 稼働中) — 設定: `/var/spool/cron/crontabs/tanaka` / `/var/log/syslog` 「2026-07-06T06:00:01.000000+00:00 legacy01 CRON[13969]: (tanaka) CMD (/home/tanaka/bin/weekly_cleanup.sh)」
- `cd` (❓ 実行履歴なし) — 設定: `/etc/crontab` / `/etc/crontab:19`
- `test` (❓ 実行履歴なし) — 設定: `/etc/crontab` / `/etc/crontab:20`
- `test` (❓ 実行履歴なし) — 設定: `/etc/crontab` / `/etc/crontab:21`
- `test` (❓ 実行履歴なし) — 設定: `/etc/crontab` / `/etc/crontab:22`
- `/opt/uriage/bin/db_backup.sh` (✅ 稼働中) — 設定: `/etc/cron.d/db-backup` / `/var/log/syslog` 「2026-07-11T01:00:01.565158+00:00 legacy01 CRON[9609]: (root) CMD (/opt/uriage/bin/db_backup.sh)」
- `test` (❓ 実行履歴なし) — 設定: `/etc/cron.d/e2scrub_all` / `/etc/cron.d/e2scrub_all:1`
- `test` (❓ 実行履歴なし) — 設定: `/etc/cron.d/e2scrub_all` / `/etc/cron.d/e2scrub_all:2`
- `/opt/scripts/sync_legacy.sh` (❌ 参照切れ) — 設定: `/etc/cron.d/legacy-sync` / `/var/log/syslog` 「2026-07-10T02:45:01.277746+00:00 legacy01 CRON[9081]: (root) CMD (/opt/scripts/sync_legacy.sh)」、`/etc/cron.d/legacy-sync:2`
- `/etc/cron.daily/apt-compat` (❓ 実行履歴なし) — 設定: `/etc/cron.daily` / `/etc/cron.daily`
- `/etc/cron.daily/dpkg` (❓ 実行履歴なし) — 設定: `/etc/cron.daily` / `/etc/cron.daily`
- `/etc/cron.daily/logrotate` (❓ 実行履歴なし) — 設定: `/etc/cron.daily` / `/etc/cron.daily`
- `/usr/local/sbin/tmp_cleanup.sh` (❓ 実行履歴なし) — 設定: `/etc/systemd/system/tmp-cleanup.timer` / `/etc/systemd/system/tmp-cleanup.timer:5`
- `/opt/uriage/bin/queue_worker.sh` (✅ 稼働中) — 設定: `/etc/rc.local` / `ps -eo pid,args` 「/opt/uriage/bin/queue_worker.sh」
- `/opt/uriage/bin/rotate_hook.sh` (ℹ️ フック) — 設定: `/etc/logrotate.d/uriage` / `/etc/logrotate.d/uriage:7`

## 特記事項 (要対応)

### 🔴 1. サイレント失敗: report_mail.sh

直近の自己ログが ERROR (2026-07-10) — 何ヶ月も失敗し続けているが誰も気づいていない可能性

- 根拠: `/var/log/syslog` 「2026-07-10T04:15:01.277746+00:00 legacy01 CRON[19394]: (root) CMD (/opt/uriage/bin/report_mail.sh)」
- 根拠: `/var/log/uriage/report_mail.log` 「2026-07-10 04:15:02 ERROR: mail command failed」

### 🔴 2. ゾンビジョブ: monthly_archive.sh

cron は起動し続けている (最終 2026-07-01) が、実作業の痕跡は 2024-07-01 が最後 (729日前)

- 根拠: `/var/log/syslog` 「2026-07-01T05:00:01.000000+00:00 legacy01 CRON[5288]: (root) CMD (/opt/uriage/bin/monthly_archive.sh)」
- 根拠: `/var/log/uriage/monthly_archive.log` 「2024-07-01 05:00:03 archive done」

### 🔴 3. ゾンビ化の根本原因: 消え残ったロックファイル

/var/run/uriage_archive.lock が 2024-07-21 から残存 (720日)。スクリプトは存在チェックで即終了するため、以後まったく仕事をしていない

- 根拠: `/opt/uriage/bin/monthly_archive.sh:9` 「touch "$LOCK"」
- 根拠: `stat /run/uriage_archive.lock` 「mtime 2024-07-21 01:48」

### 🔴 4. 平文の秘密情報: check_disk.sh

Slack Webhook URL = htt******************************************************** がスクリプトに直書きされている

- 根拠: `/home/tanaka/bin/check_disk.sh:10` 「https://hooks.slack.com/＊＊＊MASKED＊＊＊ >/dev/null」

### 🔴 5. 平文の秘密情報: db_backup.sh

PGPASSWORD = ＊＊＊MASKED＊＊＊ がスクリプトに直書きされている

- 根拠: `/opt/uriage/bin/db_backup.sh:4` 「export PGPASSWORD='＊＊＊MASKED＊＊＊'」

### 🟡 6. at ジョブの残骸

一回きりの at ジョブが実行されないまま残っている (投入 2023-09-04, atd は不在)

- 根拠: `/var/spool/cron/atjobs/a00001019bccc9` 「psql -h 192.168.10.45 -U uriage_admin -d uriage_db -c 'REINDEX DATABASE uriage_db;'」
- 根拠: `pgrep -x atd` 「atd プロセスなし」

### 🟡 7. 参照切れ: /opt/scripts/sync_legacy.sh

スクリプトが存在しないのに cron が起動し続けている (最終 2026-07-10 02:45, 30 回)

- 根拠: `/var/log/syslog` 「2026-07-10T02:45:01.277746+00:00 legacy01 CRON[9081]: (root) CMD (/opt/scripts/sync_legacy.sh)」
- 根拠: `/etc/cron.d/legacy-sync:2`

### 🟡 8. 退職者アカウントのジョブが稼働中: tanaka

アカウント tanaka はロック済みだが、その crontab のジョブ 2 件 (check_disk.sh, weekly_cleanup.sh) は今も実行されている

- 根拠: `/etc/shadow` 「tanaka:! (ロック)」
- 根拠: `/var/log/syslog` 「2026-07-11T01:40:01.000000+00:00 legacy01 CRON[24468]: (tanaka) CMD (/home/tanaka/bin/check_disk.sh)」
- 根拠: `/var/log/syslog` 「2026-07-06T06:00:01.000000+00:00 legacy01 CRON[13969]: (tanaka) CMD (/home/tanaka/bin/weekly_cleanup.sh)」

### 🟡 9. ファイル経由の隠れ依存

daily_aggregate.sh が書く /var/data/uriage/daily.csv を report_mail.sh が読んでいる。前者を止めると後者が壊れる

- 根拠: `/opt/uriage/bin/daily_aggregate.sh:11` 「echo "date,amount" > "$OUT"」
- 根拠: `/opt/uriage/bin/report_mail.sh:10` 「mail -s "[uriage] daily report" keiri@example.co.jp < "$CSV" \」

### 🟡 10. 削除ハザード

weekly_cleanup.sh が /var/data/uriage 配下を削除するが、同じ場所を daily_aggregate.sh が読み書きしている (競合の火種)

- 根拠: `/home/tanaka/bin/weekly_cleanup.sh:4` 「find /var/data/uriage -name '*.csv' -mtime +7 -delete」
- 根拠: `/opt/uriage/bin/daily_aggregate.sh:11` 「echo "date,amount" > "$OUT"」

## 文献史料

- `/opt/uriage/hikitsugi.txt` (最終更新 2024-03-15) — 引き継ぎメモ (2024-03 田中) / ・売上バッチは毎晩3時に動く。落ちたら daily_aggregate.sh を手で叩けばOK

## 依存関係図 (データの流れ)

```mermaid
flowchart LR
    _opt_uriage_bin_daily_aggregate_sh["daily_aggregate.sh"]
    _var_data_uriage_daily_csv[("/var/data/uriage/daily.csv")]
    _opt_uriage_bin_daily_aggregate_sh -->|write| _var_data_uriage_daily_csv
    _opt_uriage_bin_report_mail_sh["report_mail.sh"]
    _var_data_uriage_daily_csv -.->|read| _opt_uriage_bin_report_mail_sh
    _opt_uriage_bin_monthly_archive_sh["monthly_archive.sh"]
    _var_run_uriage_archive_lock[("/var/run/uriage_archive.lock")]
    _opt_uriage_bin_monthly_archive_sh -->|write| _var_run_uriage_archive_lock
    _opt_uriage_bin_monthly_archive_sh ==>|delete!| _var_run_uriage_archive_lock
    _home_tanaka_bin_weekly_cleanup_sh["weekly_cleanup.sh"]
    _var_data_uriage[("/var/data/uriage")]
    _home_tanaka_bin_weekly_cleanup_sh ==>|delete!| _var_data_uriage
    _opt_uriage_bin_db_backup_sh["db_backup.sh"]
    _backup_uriage__dynamic_[("/backup/uriage_<dynamic>")]
    _opt_uriage_bin_db_backup_sh -->|write| _backup_uriage__dynamic_
    _usr_local_sbin_tmp_cleanup_sh["tmp_cleanup.sh"]
    _tmp[("/tmp")]
    _usr_local_sbin_tmp_cleanup_sh ==>|delete!| _tmp
    _opt_uriage_bin_queue_worker_sh["queue_worker.sh"]
    _var_data_uriage_queue[("/var/data/uriage/queue")]
    _var_data_uriage_queue -.->|read| _opt_uriage_bin_queue_worker_sh
```

## 発掘カバレッジ (掘った場所すべて)

| 発掘場所 | 検出 | 備考 |
|---|---|---|
| ユーザー crontab (/var/spool/cron/crontabs) | 2 件 | root, tanaka |
| /etc/crontab + /etc/cron.d | 8 件 |  |
| /etc/cron.hourly | 0 件 | なし |
| /etc/cron.daily | 3 件 | apt-compat, dpkg, logrotate |
| /etc/cron.weekly | 0 件 | なし |
| /etc/cron.monthly | 0 件 | なし |
| systemd timer (/etc/systemd/system) | 1 件 |  |
| at ジョブ (/var/spool/cron/atjobs) | 1 件 |  |
| /etc/rc.local | 1 件 |  |
| logrotate postrotate フック (/etc/logrotate.d) | 1 件 |  |
| 文献史料 (/opt 配下の txt/README) | 1 件 |  |
| アカウント状態 (/etc/shadow) | 1 件 | ロック: tanaka |
| 常駐プロセス (ps) と起動機構の突き合わせ | 0 件 | 不整合 0 件 |

## 未確定事項 (要人間確認)

以下は根拠が不足しており、本報告書では事実として扱っていない:

- `cd / && run-parts --report /etc/cron.hourly` — syslog に一度も現れない (設定: `/etc/crontab`)
- `test -x /usr/sbin/anacron || ( cd / && run-parts --report /e` — syslog に一度も現れない (設定: `/etc/crontab`)
- `test -x /usr/sbin/anacron || ( cd / && run-parts --report /e` — syslog に一度も現れない (設定: `/etc/crontab`)
- `test -x /usr/sbin/anacron || ( cd / && run-parts --report /e` — syslog に一度も現れない (設定: `/etc/crontab`)
- `test -e /run/systemd/system || SERVICE_MODE=1 /usr/lib/x86_6` — syslog に一度も現れない (設定: `/etc/cron.d/e2scrub_all`)
- `test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_` — syslog に一度も現れない (設定: `/etc/cron.d/e2scrub_all`)
- `/etc/cron.daily/apt-compat` — syslog に一度も現れない (設定: `/etc/cron.daily`)
- `/etc/cron.daily/dpkg` — syslog に一度も現れない (設定: `/etc/cron.daily`)
- `/etc/cron.daily/logrotate` — syslog に一度も現れない (設定: `/etc/cron.daily`)
- `/usr/local/sbin/tmp_cleanup.sh` — syslog に実行記録がない (設定: `/etc/systemd/system/tmp-cleanup.timer`)
- 文献 `/opt/uriage/hikitsugi.txt` の記述は伝聞であり、本調査の裏付けと矛盾がないか要確認

## 移行への提言

1. サイレント失敗: report_mail.sh — 最優先で対処
2. ゾンビジョブ: monthly_archive.sh — 最優先で対処
3. ゾンビ化の根本原因: 消え残ったロックファイル — 最優先で対処
4. 平文の秘密情報: check_disk.sh — 最優先で対処
5. 平文の秘密情報: db_backup.sh — 最優先で対処
6. 参照切れ・実行履歴なしのジョブは棚卸しの上で削除候補に
7. 全ジョブを IaC/ジョブ基盤 (systemd timer 統一 or CI スケジューラ) へ移行し、この報告書を台帳として維持
## クラウド発掘 (findy-devops-hackathon)

ローカルの crontab と同じ枠組みで、GCP の時間キック機構 3 面を「定義 × 実行履歴」で突き合わせた:

### Cloud Scheduler (クラウドの crontab)

| 状態 | ジョブ | スケジュール | 呼び先 | 詳細 |
|---|---|---|---|---|
| ✅ 稼働中 | `uriage-event-emitter` | `0 * * * *` | `projects/findy-devops-hackathon/topics/uriage-events` | 最終実行 2026-07-11T10:00:02 |
| 💤 放置 | `uriage-daily-aggregate` | `30 3 * * *` | `https://unyou-koukogaku-77zxtpuebq-an.a.run.app/api/v1/` | PAUSED のまま (最終更新 2026-07-11)。止めた理由の記録なし |
| ⚠️ 毎回失敗 | `uriage-legacy-sync` | `45 2 * * *` | `https://unyou-koukogaku-77zxtpuebq-an.a.run.app/api/v1/` | 直近 5 回すべて失敗 (status: NOT_FOUND)。呼び先が消えている可能性 |
| ✅ 稼働中 | `uriage-health-ping` | `*/30 * * * *` | `https://unyou-koukogaku-77zxtpuebq-an.a.run.app/` | 最終実行 2026-07-11T10:00:01 |

### Pub/Sub (メッセージの行き先)

| 状態 | トピック | 購読者 | publisher | 詳細 |
|---|---|---|---|---|
| 🕳️ 虚空 | `uriage-events` | 0 | `uriage-event-emitter` | Scheduler `uriage-event-emitter` が定期 publish しているが**購読者がゼロ** — メッセージは誰にも読まれず消えている |

### BigQuery 定期クエリ (分析者の遺産)

| 状態 | 定期クエリ | スケジュール | 詳細 |
|---|---|---|---|
| ⚠️ 毎回失敗 | `daily_sales_summary` | `every 24 hours` | 直近 3 回すべて失敗。エラー: 「Not found: Table findy-devops-hackathon:uriage_dwh.daily_sales_v1 was not found in locatio」 |

根拠 (クラウド発掘):

- `uriage-event-emitter` — 定義: `projects/findy-devops-hackathon/locations/asia-northeast1/jobs/uriage-event-emitter` (state=ENABLED) / Cloud Logging 直近試行: 2026-07-11T10:00:06 status=OK
- `uriage-daily-aggregate` — 定義: `projects/findy-devops-hackathon/locations/asia-northeast1/jobs/uriage-daily-aggregate` (state=PAUSED)
- `uriage-legacy-sync` — 定義: `projects/findy-devops-hackathon/locations/asia-northeast1/jobs/uriage-legacy-sync` (state=ENABLED) / Cloud Logging 直近試行: 2026-07-11T01:08:24 status=NOT_FOUND
- `uriage-health-ping` — 定義: `projects/findy-devops-hackathon/locations/asia-northeast1/jobs/uriage-health-ping` (state=ENABLED) / Cloud Logging 直近試行: 2026-07-11T10:00:10 status=OK
- `uriage-events` — topics.list: `projects/findy-devops-hackathon/topics/uriage-events` / subscriptions: 0 件
- `daily_sales_summary` — transferConfig: `6a544648-0000-2397-b47e-94eb2c0e8f82` (dataSource=scheduled_query) / 直近 run: 2026-07-11T01:40:00 FAILED

発掘カバレッジ (クラウド): Cloud Scheduler (asia-northeast1) / Pub/Sub topics / BigQuery DTS (asia-northeast1) — 全面走査済み



---

# 考古学者の追補調査書 (Gemini)

# 考古学者の追補調査書

## 考察 (遺跡の成り立ち)

本システムの発掘調査の結果、長期にわたる運用の中で、技術的な負債の蓄積と運用知識の属人化が進行している実態が明らかになった。特に、退職者「田中」氏がシステム構築と運用に深く関与していた痕跡が多く見られ、その影響は退職後もシステムに残り続けている。

- **属人化と技術的負債**: 多数のジョブが田中氏によって作成されており、スクリプト内に直接秘密情報が記述されたり、後回しにされた改善点 (`FIXME` や `TODO`) が放置されたりしている (`/opt/uriage/bin/db_backup.sh:4`, `/home/tanaka/bin/check_disk.sh:10`, `/opt/uriage/bin/daily_aggregate.sh:5`)。
- **移行の試みと頓挫**: `systemd timer` への移行 (`tmp_cleanup.sh`) や、Google Cloud Scheduler への移行 (`uriage-daily-aggregate`, `uriage-legacy-sync`) が試みられた痕跡があるが、いずれも一部が未完のまま放置されている (`uriage-daily-aggregate` は `PAUSED` 状態、`uriage-legacy-sync` は呼び出し先 `NOT_FOUND`)。
- **情報の散逸と不整合**: 引き継ぎメモ (`/opt/uriage/hikitsugi.txt`) には、「月次アーカイブも動いている (はず)」とあるが、実際にはロックファイルのためにアーカイブ処理は停止している。また、重要な運用手順が記載されていた社内Wikiのリンクはすでに切れている。
- **孤立した残骸**: `atd` プロセスが停止しているため、`at` コマンドで投入された単発ジョブ (`/var/spool/cron/atjobs/a00001019bccc9`) が実行されずに残骸となっている。

これらの状況から、現在のシステムは、過去の運用者の知見に大きく依存し、新しい技術への移行や改善が計画されつつも、何らかの理由で完遂されず、複雑で不透明な状態に陥っていると推定される。

## 失われた理由の推定

### monthly_archive.sh のゾンビ化とロックファイル残存の理由
`monthly_archive.sh` はスクリプト冒頭でロックファイルの存在を確認し、存在すれば `exit 0` で終了する構造になっている (`/opt/uriage/bin/monthly_archive.sh:6-7`)。ロックファイル `/var/run/uriage_archive.lock` は 2024-07-21 から残存しており (`stat /var/run/uriage_archive.lock`)、最終実行ログは 2024-07-01 が最後となっている (`/var/log/uriage/monthly_archive.log`)。
このことから、2024-07-21以降、`monthly_archive.sh` が起動してもロックファイルによって即座に終了し、アーカイブ処理は一切行われていないと推定される。
ロックファイルが残った原因としては、スクリプトの実行中に何らかの異常が発生し、正常終了時の `rm -f "$LOCK"` (`/opt/uriage/bin/monthly_archive.sh:15`) が実行されなかった可能性が高い。例えば、ディスク容量逼迫による書き込みエラー、OOM Killerによるプロセス強制終了、あるいは致命的なエラーによるスクリプトの異常終了などが考えられる。

### report_mail.sh のサイレント失敗の理由
`report_mail.sh` は `/var/data/uriage/daily.csv` が存在しない場合はエラー終了し (`/opt/uriage/bin/report_mail.sh:5-8`)、`mail` コマンドの失敗時もエラーをログに出力する (`/opt/uriage/bin/report_mail.sh:10-11`)。
発掘報告書には「直近の自己ログが ERROR (2026-07-10)」（`/var/log/uriage/report_mail.log` の出力）とあるため、`/var/data/uriage/daily.csv` が存在するにもかかわらず `mail` コマンドが失敗していると推定される。
推定: これはメールサーバの設定変更、ネットワーク経路の障害、宛先 `keiri@example.co.jp` のアドレスが無効になった、あるいは `mail` コマンド自体の設定や権限問題などが原因で、メール送信ができない状態になっていると考えられる。

### クラウド移行ジョブの頓挫 (uriage-daily-aggregate, uriage-legacy-sync)
`uriage-daily-aggregate` はクラウド側で `PAUSED` 状態であり (`survey_cloud_scheduler` 出力)、ローカルの `daily_aggregate.sh` と全く同じスケジュール (`30 3 * * *`) で定義されている。これはローカルの `daily_aggregate.sh` の機能をクラウドへ移行しようとしたが、何らかの理由で作業が中断され、`PAUSED` 状態のまま放置されたと推定される。
`uriage-legacy-sync` も同様に、ローカルの `sync_legacy.sh` が参照切れ (`/opt/scripts/sync_legacy.sh` が存在しない: `ls -l /opt/scripts/sync_legacy.sh` 出力) となっている一方で、クラウド側でも `NOT_FOUND` エラーで失敗している (`survey_cloud_scheduler` 出力)。これは旧基幹システム連携の機能自体が不要になったため、ローカル・クラウド双方で実体が削除されたが、ジョブの定義だけが残ってしまった状態だと推定される。

### uriage-events Pub/Sub トピックに購読者がゼロの理由
`uriage-event-emitter` が定期的に publish している `uriage-events` トピックに購読者がゼロである (`survey_cloud_scheduler` 出力)。
推定: このイベントが本来どのような目的で、誰に消費されるべきだったのかが不明である。システム連携の要件が変更されたか、連携先のサービスが停止・削除されたが、イベントの発行元だけが残ってしまった可能性が高い。あるいは、この Pub/Sub を利用する予定だったシステム自体が開発中止になったか、別の方法で連携が実現されたため、このトピックは役割を終えたがクリーンアップされなかった。

## 業務影響

-   **売上レポートのサイレント失敗**: `report_mail.sh` の失敗により、経理部門へ日次売上レポートが届いていない可能性が極めて高く、売上状況の把握や経営判断に重大な支障をきたしている恐れがある。サイレント失敗であるため、誰も問題に気づいていない可能性が高い。
-   **月次アーカイブの停止**: `monthly_archive.sh` のゾンビ化により、月次データのアーカイブが過去720日以上行われていない。これはデータのバックアップ不足、古いデータの長期保管によるストレージ容量逼迫、監査対応の困難化、災害復旧時のデータロストリスクの増大など、多岐にわたる業務影響を引き起こす。
-   **ディスク監視アラートの不達**: `check_disk.sh` のSlack Webhookが「旧Slackワークスペースの Webhook。移行で死んでいる」とコメントされており (`/home/tanaka/bin/check_disk.sh:8`)、ディスク使用量のアラートが正しく通知されていない可能性がある。これにより、ディスクフルによるシステム停止などの重大な障害を見落とすリスクがある。
-   **データ削除とレポート生成の競合**: `weekly_cleanup.sh` が `/var/data/uriage` 配下の `.csv` ファイルを7日経過後に削除しており (`/home/tanaka/bin/weekly_cleanup.sh:4`)、`daily_aggregate.sh` が作成する `/var/data/uriage/daily.csv` (`/opt/uriage/bin/daily_aggregate.sh:7`) も削除対象となる可能性がある。これにより、過去の日次レポートが失われたり、`report_mail.sh` が `daily.csv` が見つからずに失敗したりするリスクがある。
-   **BigQuery 売上サマリーの失敗**: `daily_sales_summary` の定期クエリ失敗により、BigQuery上での日次売上サマリーが作成されていない。これはデータ分析チームや経営層が日次の売上トレンドを正確に把握できないことを意味し、データに基づいた迅速な意思決定を阻害する。
-   **イベントの垂れ流し**: `uriage-events` トピックへのイベント発行が続けられているが、購読者がいないため、重要なシステム間連携が機能していないか、無駄なリソース消費が発生している。

## 移行計画 (優先順位つき)

### 最優先 (P0: セキュリティ、直接的な業務影響)

1.  **`report_mail.sh` のサイレント失敗対応**
    *   **内容**: `mail` コマンドの失敗原因を特定し、メール送信機能を復旧させる。経理部門への日次売上レポートの正常な配信を最優先で確保する。
    *   **根拠**: 🔴 1. サイレント失敗: report_mail.sh (`/var/log/uriage/report_mail.log`)、🟡 9. ファイル経由の隠れ依存 (`/opt/uriage/bin/report_mail.sh:10`)。
    *   **アクション**: メールサーバ設定の確認、宛先アドレスの有効性確認、`mail` コマンドの実行権限確認。

2.  **`monthly_archive.sh` のゾンビ化対応**
    *   **内容**: `/var/run/uriage_archive.lock` を手動で削除し、月次アーカイブを正常に動作させる。ロックファイルが残存した根本原因を調査し、スクリプトにエラーハンドリングを追加するなどして再発を防止する（例: `trap "rm -f \"$LOCK\"" EXIT` の導入）。
    *   **根拠**: 🔴 2. ゾンビジョブ: monthly_archive.sh (`/var/log/uriage/monthly_archive.log`)、🔴 3. ゾンビ化の根本原因: 消え残ったロックファイル (`/opt/uriage/bin/monthly_archive.sh:9`, `stat /var/run/uriage_archive.lock`)。
    *   **アクション**: ロックファイルの削除、スクリプト修正、アーカイブ状況の確認。

3.  **平文の秘密情報 (check_disk.sh, db_backup.sh) の解消**
    *   **内容**: `check_disk.sh` のSlack Webhook URL (`/home/tanaka/bin/check_disk.sh:10`) と `db_backup.sh` の `PGPASSWORD` (`/opt/uriage/bin/db_backup.sh:4`) を、環境変数、またはSecret Managerなどのセキュアな方法で管理するよう移行する。
    *   **根拠**: 🔴 4. 平文の秘密情報: check_disk.sh、🔴 5. 平文の秘密情報: db_backup.sh。
    *   **アクション**: 秘密情報管理の仕組み導入、スクリプト修正。

### 高優先度 (P1: 業務影響中、リスク軽減)

1.  **退職者アカウント (tanaka) のジョブの棚卸しと移行/削除**
    *   **内容**: アカウント `tanaka` はロックされているが、その `crontab` のジョブ (`check_disk.sh`, `weekly_cleanup.sh`) は稼働中 (`/var/spool/cron/crontabs/tanaka`)。これらのジョブが必要な場合は `root` または適切なサービスアカウントに移行し、不要であれば停止・削除する。
    *   **根拠**: 🟡 8. 退職者アカウントのジョブが稼働中: tanaka (`/etc/shadow`, `/var/spool/cron/crontabs/tanaka`)。
    *   **アクション**: ジョブの業務要否確認、所有権変更、権限調整。

2.  **`weekly_cleanup.sh` と `daily_aggregate.sh` の競合解消**
    *   **内容**: `weekly_cleanup.sh` が `/var/data/uriage` 配下の `.csv` を削除する動作 (`/home/tanaka/bin/weekly_cleanup.sh:4`) と、`daily_aggregate.sh` が `/var/data/uriage/daily.csv` を作成する動作 (`/opt/uriage/bin/daily_aggregate.sh:7`) が競合するリスクを解消する。`daily.csv` を削除対象から除外するか、`weekly_cleanup.sh` の実行タイミングや削除条件を見直す。
    *   **根拠**: 🟡 9. ファイル経由の隠れ依存 (`/opt/uriage/bin/daily_aggregate.sh:7`)、🟡 10. 削除ハザード (`/home/tanaka/bin/weekly_cleanup.sh:4`)。
    *   **アクション**: スクリプト修正、ディレクトリ構造の見直し。

3.  **`uriage-events` (Pub/Sub) の購読者ゼロ問題の調査と対応**
    *   **内容**: `uriage-event-emitter` が発行する Pub/Sub トピック `uriage-events` に購読者がいない状況 (`survey_cloud_scheduler` 出力) を解消する。このイベントが必要であれば購読者を作成し、不要であれば `uriage-event-emitter` からの publish を停止する。
    *   **根拠**: 🕳️ 虚空: uriage-events (`survey_cloud_scheduler` 出力)。
    *   **アクション**: イベントの業務要否確認、システム連携の再構築または停止。

4.  **`daily_sales_summary` (BigQuery) の失敗対応**
    *   **内容**: BigQuery の定期クエリ `daily_sales_summary` が「テーブルが見つからない」エラーで失敗している状態を修正する。参照先のテーブル `findy-devops-hackathon:uriage_dwh.daily_sales_v1` が存在しない原因を調査し、クエリを修正するか、テーブルを再作成する。
    *   **根拠**: ⚠️ 毎回失敗: daily_sales_summary (`survey_cloud_scheduler` 出力)。
    *   **アクション**: BigQuery のスキーマ確認、クエリ修正。

### 中優先度 (P2: 健全性向上、モダン化推進)

1.  **参照切れ/実行履歴なしのジョブの棚卸しと削除**
    *   **内容**:
        *   `sync_legacy.sh` 関連 (ローカル cron とクラウド Scheduler): 旧基幹システム連携機能が不要と判断される場合、ローカルの `/etc/cron.d/legacy-sync` とクラウドの `uriage-legacy-sync` ジョブを完全に削除する。
        *   `/etc/crontab` の `cd`, `test` コマンドを含む行: `anacron` や `systemd` が処理を肩代わりしているため `syslog` に直接記録がないこれらのエントリ (`/etc/crontab:19-22`, `/etc/cron.d/e2scrub_all:1-2`) は、システムにとって必要な動作を妨げないことを確認の上、削除またはコメントアウトを検討する。
    *   **根拠**: 🟡 7. 参照切れ: /opt/scripts/sync_legacy.sh (`/etc/cron.d/legacy-sync`, `ls -l` 出力)、❓ 実行履歴なし (etc-cron, etc-cron.d) (`/etc/crontab`, `/etc/cron.d/e2scrub_all`、`read_file` 出力)。
    *   **アクション**: ジョブの業務要否確認、設定ファイルの修正。

2.  **`atd` の起動または残骸 at ジョブの削除**
    *   **内容**: 実行されずに残っている at ジョブ (`/var/spool/cron/atjobs/a00001019bccc9`) は、過去の一時的なDBメンテナンスのためであり、すでに役割を終えているため削除する。もし今後 `at` コマンドを利用する予定があるならば `atd` を起動するが、そうでない場合は無効のまま残骸をクリーンアップする。
    *   **根拠**: 🟡 6. at ジョブの残骸 (`/var/spool/cron/atjobs/a00001019bccc9`, `pgrep -x atd` 出力)。
    *   **アクション**: at ジョブの削除、`atd` サービスの状態見直し。

3.  **`uriage-daily-aggregate` のクラウド移行再開**
    *   **内容**: ローカルで稼働中の `daily_aggregate.sh` の機能を、クラウドの `uriage-daily-aggregate` へ完全に移行する。これにより、オンプレミスの cron 依存を解消し、運用のモダン化を進める。同時に、`daily_aggregate.sh` に依存する `report_mail.sh` のクラウド移行も検討する。
    *   **根拠**: 💤 放置: uriage-daily-aggregate (`survey_cloud_scheduler` 出力)、✅ 稼働中: user-crontab (`/opt/uriage/bin/daily_aggregate.sh`)、引き継ぎメモ (`/opt/uriage/hikitsugi.txt:3`)。
    *   **アクション**: クラウド移行計画の策定と実行、ローカルジョブの停止。

4.  **`queue_worker.sh` の停止理由不明問題の調査と永続化構成の検討**
    *   **内容**: 引き継ぎメモにある「queue_worker は絶対に止めないこと!!! (理由は忘れた)」の理由を調査し、その重要性を再確認する。必要であれば、`rc.local` ではなく `systemd` サービスなどによる永続化構成を検討・移行する。
    *   **根拠**: ✅ 稼働中: rc.local (`/opt/uriage/bin/queue_worker.sh`)、文献史料 (`/opt/uriage/hikitsugi.txt:8`)。
    *   **アクション**: 業務ヒアリング、プロセスの監視強化、永続化サービスの設計・導入。

### 低優先度 (P3: 文書化、継続的改善)

1.  **失われた Wiki ドキュメントの再構築**
    *   **内容**: リンク切れとなっている「uriage-batch 運用手順」(`http://wiki.internal.example.co.jp/uriage`) のドキュメントを再構築し、今回の調査結果や新しい運用手順を反映させる。
    *   **根拠**: 文献史料 (`/opt/uriage/hikitsugi.txt:6-7`)。
    *   **アクション**: ドキュメント作成、共有。

2.  **`daily_aggregate.sh` の Python 化検討**
    *   **内容**: `daily_aggregate.sh` のスクリプトコメントにある「TODO: いつか Python に書き直す (田中 2020-01)」(`/opt/uriage/bin/daily_aggregate.sh:5`) を検討し、モダンなスクリプト言語への移行計画を策定する。
    *   **根拠**: `/opt/uriage/bin/daily_aggregate.sh:5`。
    *   **アクション**: 技術調査、移行計画立案。