Macでn8nを自動起動:launchdでの苦戦とpm2による解決策
この記事では、macOS標準のlaunchdでの自動起動設定に挑戦し、多くの問題に直面した後、最終的にNode.jsプロセス管理ツールpm2で安定した環境を構築。
なぜ自動起動?最初の挑戦:launchd
n8nは便利なツールですが、Mac起動のたびに手動で起動するのは面倒です。そこでmacOS標準のlaunchdを使い、ログイン時の自動起動を目指しました。
launchdとの格闘:設定とトラブル
launchdでは.plist設定ファイルを作成し、~/Library/LaunchAgents/に配置します。
基本的な.plistファイル例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "[http://www.apple.com/DTDs/PropertyList-1.0.dtd](http://www.apple.com/DTDs/PropertyList-1.0.dtd)">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.n8n.app</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/node</string>
<string>/path/to/n8n</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/your_username/Library/Logs/n8n.log</string>
<key>StandardErrorPath</key>
<string>/Users/your_username/Library/Logs/n8n.error.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
<key>N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS</key>
<string>true</string>
<key>N8N_RUNNERS_ENABLED</key>
<string>true</string>
</dict>
</dict>
</plist>
(注意: 各パスはご自身の環境に合わせてください。)
主な問題点と試行錯誤
launchctl load -wでロードを試みましたが、多くの問題に直面しました。
-
Load failed: 5: Input/output error:-
plutil -lintでの構文チェックはOK。 - 実行パス、ログパス、パーミッションを何度も確認・修正。
-
-
不安定な動作:
- ロード後も、n8nが起動直後に
SIGTERMで終了し、KeepAliveで再起動を繰り返す状態に。
- ロード後も、n8nが起動直後に
-
launchdサービスのアンロード失敗:-
launchctl unloadもエラーを返し、リセットが困難。
-
重要な切り分け: ターミナルからn8nを手動実行すると安定動作しました。これにより、問題はn8n自体ではなくlaunchdとの連携にあると判断できました。
解決策:pm2への移行
launchdでの安定運用が難しかったため、Node.jsアプリ管理に特化したpm2に切り替えました。
pm2セットアップ手順
-
pm2インストール:npm install pm2 -g -
n8nを
pm2で起動 (エコシステムファイル利用):
ホームディレクトリなどにecosystem.config.jsを作成します。// ecosystem.config.js module.exports = { apps: [{ name: "n8n-auto", script: "/path/to/n8n", // `which n8n`で確認したパス cwd: "/Users/your_username/", // ホームディレクトリなど env: { "NODE_ENV": "production", "N8N_PORT": 5678, "N8N_HOST": "localhost", "WEBHOOK_URL": "http://localhost:5678/", "N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS": "true", "N8N_RUNNERS_ENABLED": "true", "N8N_DIAGNOSTICS_ENABLED": "false", // テレメトリー無効化 (任意) "N8N_VERSION_NOTIFICATIONS_ENABLED": "false" // バージョンチェック無効化 (任意) } }] };(注意:
scriptとcwdのパスは環境に合わせてください。)エコシステムファイルでn8nを起動:
pm2 start ~/ecosystem.config.js -
動作確認:
pm2 list ```n8n-auto`が`online`であることを確認。ログは`pm2 logs n8n-auto`で。 ブラウザで`http://localhost:5678`にアクセス。 -
pm2設定保存と自動起動設定:pm2 save pm2 startup ```pm2 startup`実行後に表示されるコマンドを実行します。
これでMac再起動時にpm2経由でn8nが自動起動します。
n8nの情報送信について
n8nはデフォルトで匿名の利用統計(テレメトリー)等を送信します。無効化はエコシステムファイルのenvセクションで以下を設定します。
N8N_DIAGNOSTICS_ENABLED: "false"N8N_VERSION_NOTIFICATIONS_ENABLED: "false"
まとめ
launchdでのn8n自動起動は困難でしたが、pm2を利用することで安定した環境を構築できました。
教訓:
- 手動での安定動作確認が基本。
- 一つの方法に固執せず、代替案も検討する。
- ログは問題解決の最大のヒント。
この記事がMacでのn8n自動起動に悩む方の一助となれば幸いです。
Discussion