使用Forever(Node.js模块)运行Python脚本异常:无法启动或频繁重启
I’ve run into similar headaches with Forever and Python apps before, so let’s break down how to troubleshoot your specific problem—where app.py runs fine manually, but Forever either leaves it in STOPPED state or spams restarts every 0.8s, even after reinstalling Node/Forever and rebooting.
1. First, Check Forever’s Error Logs (Critical!)
The biggest mistake people make is skipping the error logs. Forever might be failing silently, but the logs will tell you exactly why:
- Start your app with explicit log files to capture errors:
forever start -o app-out.log -e app-err.log app.py - Or find the default log path from
forever list—look for thelogfileentry next to your stopped process, then open that file.
Focus on app-err.log—common issues here include missing Python modules, permission denied errors (if the app needs to write to a file or access a port), or relative path problems (more on that next).
2. Make Sure Forever Uses the Right Python Environment
9 times out of 10, this is the culprit. Forever might be calling a different Python version than the one you use manually:
- First, find the path to your working Python:
You’ll get something like# Linux/macOS which python3 # Windows (Command Prompt) where python3/usr/local/bin/python3orC:\Python39\python.exe. - Then tell Forever to use this exact Python interpreter:
forever start --command "/usr/local/bin/python3" app.py
If you’re using a virtual environment, point Forever to the Python executable inside your venv folder (e.g., ./venv/bin/python3).
3. Fix the Working Directory Mismatch
Python apps often rely on relative paths (like ./config.json or ./static/). If you start Forever from a different folder than where app.py lives, the app will look for files in the wrong place and crash:
- Either cd to your app’s directory first:
cd /path/to/your/app-folder forever start app.py - Or specify the working directory directly in the Forever command:
forever start --workingDir /path/to/your/app-folder app.py
4. Skip the Restart Parameters Until You Fix the Root Cause
Using --minUptime 1000 --spinSleepTime 1000 is treating the symptom, not the disease. The app is restarting so often because it’s crashing within 1 second of starting—fix the crash first with steps 1-3, then adjust restart rules if needed.
5. Enable Verbose Mode for More Details
Add the -v flag to get a play-by-play of how Forever is trying to start your app:
forever start -v app.py
This might reveal subtle issues like environment variable mismatches or interpreter errors.
6. Try PM2 as an Alternative (If All Else Fails)
Forever is a bit outdated, and PM2 has better support for Python apps. It’s worth a shot:
- Install PM2:
npm install -g pm2 - Start your app with the correct Python interpreter:
pm2 start app.py --interpreter python3 - Check status and logs:
pm2 list pm2 logs
In my case, the problem was that Forever defaulted to system Python 2.7, but my app required Python 3. Once I specified the correct interpreter path, everything worked smoothly. Start with the error logs—they’ll point you straight to the issue.
内容的提问来源于stack exchange,提问作者Aaron Mazie

