📝

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でロードを試みましたが、多くの問題に直面しました。

  1. Load failed: 5: Input/output error:

    • plutil -lintでの構文チェックはOK。
    • 実行パス、ログパス、パーミッションを何度も確認・修正。
  2. 不安定な動作:

    • ロード後も、n8nが起動直後にSIGTERMで終了し、KeepAliveで再起動を繰り返す状態に。
  3. launchdサービスのアンロード失敗:

    • launchctl unloadもエラーを返し、リセットが困難。

重要な切り分け: ターミナルからn8nを手動実行すると安定動作しました。これにより、問題はn8n自体ではなくlaunchdとの連携にあると判断できました。

解決策:pm2への移行

launchdでの安定運用が難しかったため、Node.jsアプリ管理に特化したpm2に切り替えました。

pm2セットアップ手順

  1. pm2インストール:

    npm install pm2 -g
    
  2. 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" // バージョンチェック無効化 (任意)
        }
      }]
    };
    

    (注意: scriptcwdのパスは環境に合わせてください。)

    エコシステムファイルでn8nを起動:

    pm2 start ~/ecosystem.config.js
    
  3. 動作確認:

    pm2 list
    ```n8n-auto``online`であることを確認。ログは`pm2 logs n8n-auto`で。
    ブラウザで`http://localhost:5678`にアクセス。
    
    
  4. 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