ubuntu
カテゴリ
Mirakurun と EPGStation の起動順を明示化
2026/06/01 21時tv
Ubuntu Server を再起動すると、Docker は自動的に機動するが、コンテナの順番を明示化していなかった為に、EPGStation が先に立ち上がってから、Mirakurun が起動すると、EPGStation の番組表は見られるが、録画が出来なくなった事があった、今まではたまたまタイミングが合っていたか、EPGStation が内部でリトライして接続できていた可能性があったが、この不具合を無くすために、サービスに登録する事とした。

Ubuntu再起動

Docker起動

① Mirakurun起動(systemdが管理)

② MirakurunのAPIが応答するまで最大150秒待機

③ EPGStation起動(Mirakurun準備完了を確認してから)

mirakurun.serviceファイルの作成
sudo nano /etc/systemd/system/mirakurun.service
docker.service の後に起動
[Unit]
Description=Mirakurun Docker Container
Requires=docker.service
After=docker.service network-online.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/mnt/data/docker/mirakurun
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=120

[Install]
WantedBy=multi-user.target

epgstation.serviceファイルの作成
sudo nano /etc/systemd/system/epgstation.service
mirakurun.service の後に起動 + Mirakurun APIが応答するまで最大150秒待機してから起動
[Unit]
Description=EPGStation Docker Container
Requires=docker.service mirakurun.service
After=docker.service mirakurun.service
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/mnt/data/docker/epgstation
ExecStartPre=/bin/bash -c '\
  echo "Waiting for Mirakurun..."; \
  for i in $(seq 1 30); do \
    if curl -sf http://localhost:40772/api/status > /dev/null 2>&1; then \
      echo "Mirakurun is ready."; \
      exit 0; \
    fi; \
    echo "Waiting... ($i/30)"; \
    sleep 5; \
  done; \
  echo "Mirakurun did not respond in time."; \
  exit 1'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

サービスに登録
# docker-compose.ymlのrestart: alwaysを無効化(systemdと競合するため)
sudo sed -i 's/restart: always/restart: "no"/' /mnt/data/docker/mirakurun/docker-compose.yml
sudo sed -i 's/restart: always/restart: "no"/' /mnt/data/docker/epgstation/docker-compose.yml

# systemdに登録して有効化
sudo systemctl daemon-reload
sudo systemctl enable mirakurun.service epgstation.service

■注意:Ubuntu Server 起動後に、EPGStation の再起動は問題ないが、チャンネル設定変更があった場合等で、 Mirakurunを再起動する場合は、EPGStationを止めてから、Mirakurun を起動し、150秒待って EPGStation 起動と言う手順が必要。
記事一覧