WSL2 で常駐サービスを動かす設定(.wslconfig / systemd / 定期実行)

一言まとめ

Docker や CouchDB を WSL2 で常駐させるなら、.wslconfig でメモリ上限と swap を明示し、/etc/wsl.conf で systemd を有効化する。cron は WSL 停止中に走らないので、確実性が要るジョブは Windows タスクスケジューラから wsl.exe を呼ぶ。データは ext4 側に置き /mnt/c を避ける。

作成 · 更新 · #wsl2#windows#docker#selfhost
目次 6 sections
  1. 01 リソース割当(.wslconfig)
  2. 02 systemd の有効化(/etc/wsl.conf)
  3. 03 定期実行の二択
  4. 方式 A: WSL 内 cron(systemd 必須)
  5. 方式 B: Windows タスクスケジューラ
  6. 選び方
  7. 04 ファイルシステムの配置
  8. ディスクの注意点
  9. 05 関連
  10. 06 更新履歴

調査時点: 2026-05。AFFiNE(Postgres + Redis + Node)と Obsidian LiveSync(CouchDB)を WSL2 で同時に動かす前提で整理した。

WSL2(Windows Subsystem for Linux 2)は、Windows 上で Linux 環境を動かす仕組み。Linux カーネルを軽量な仮想マシンで実行し、Linux のコマンドやサービスをそのまま使える。

リソース割当(.wslconfig)#

WSL2 のデフォルトは全 RAM の 50% を上限にする。常駐サービスを複数動かすと他の作業を圧迫するので、上限と swap を明示する。

Windows 側 %USERPROFILE%\.wslconfig:

[wsl2]
memory=8GB
processors=4
swap=4GB

目安は最低 4GB、推奨 8GB、余裕があれば 12GB。設定後は Windows 側で wsl --shutdown を実行して再起動する。WSL 起動中は .wslconfig の再読み込みが効かない。

systemd の有効化(/etc/wsl.conf)#

WSL2 の標準状態では init が busybox 相当で systemctl が動かない。cron / docker / 各種デーモンを常駐させるには systemd が要る。

[boot]
systemd=true

wsl --shutdown 後に確認する。

Terminal window
systemctl --version
sudo systemctl enable cron
sudo systemctl enable docker

定期実行の二択#

WSL2 ディストロが起動していない時間帯のジョブはスキップされる。日次バックアップのように確実性が要るジョブは、この制約を前提に方式を選ぶ。

方式 A: WSL 内 cron(systemd 必須)#

ディストロが起動していれば動く。常時起動のデスクトップには十分。

Terminal window
crontab -e
# 毎日 03:00 にバックアップ
0 3 * * * tar --zstd -cf ~/backup/vault-$(date +\%F).tar.zst -C ~ vault

短所: PC スリープ中・WSL 停止中はスキップされ、復帰時に未実行分を追走する仕組みが標準にはない(anacron を入れれば可能だが WSL2 では設定が煩雑)。

方式 B: Windows タスクスケジューラ#

「ログオン時に実行」「失敗時に再試行」「復帰時に未実行を追走」が使える。

Terminal window
$action = New-ScheduledTaskAction -Execute "wsl.exe" `
-Argument "bash -c '~/scripts/backup.sh'"
$trigger = New-ScheduledTaskTrigger -Daily -At 3:00am
Register-ScheduledTask -TaskName "VaultBackup" `
-Action $action -Trigger $trigger -RunLevel Highest

スクリプト側に set -euo pipefail と失敗通知(notify-send、Slack webhook、メール)を入れ、サイレント失敗を防ぐ。

選び方#

ケース推奨
常時起動デスクトップ、WSL も常時稼働A(cron)
ノート PC、スリープ多用B(タスクスケジューラ)
バックアップなど絶対に走らせたいものB
Docker などサービス常駐が前提systemd が必須なので A と相性がよい

ファイルシステムの配置#

配置性能備考
~/ 配下(ext4)高いinotify が正常に動く。Obsidian の即時反映や DB の I/O に向く
\\wsl$\<distro>\home\...(Windows から参照)中Plan9 経由。大量ファイルでインデックスが遅れる
/mnt/c/...(NTFS)低いinotify が機能せず、ファイル監視型のツールが壊れる。データ置き場にしない

認証情報は ~/.config/<tool>/credentials.json(chmod 600)のように Linux 側に閉じる。

ディスクの注意点#

  • WSL2 のファイルシステムは ext4.vhdx 上にある。DB の I/O が走るなら、その物理ディスクが SSD かを確認する
  • ext4.vhdx は一度膨らむと自動では縮まない。縮めるには WSL を停止して Optimize-VHD するか、新規ディストロにコピーする。Blob を大量に入れる前に未使用ファイルの削除方針を決めておく
  • バックアップ先は WSL2 の外(Windows 側のクラウド同期フォルダへ \\wsl$\ 経由でコピー、または rclone で外部ストレージ)。vhdx が壊れるとバックアップごと消える

関連#

更新履歴#

  • 2026-05-10: 初版(ローカル調査ノート)
  • 2026-10-17: Wiki へ移植、概念ページとして再構成。冒頭に定義を追加

同じトピック — ツール