云主机如何设置开机自启动程序
在共绩算力平台上,云主机关机后再次开机,环境和数据会保留,但之前运行的进程不会自动恢复。如果您的云主机主要用于运行持续性服务(如 WebUI、API 服务等),每次开机手动启动程序会非常繁琐。
为了实现”开机即运行”,平台支持通过 Supervisord 配置块直接在控制台的”启动参数”中注入自启动逻辑。这种方式无需 SSH 登录机器,操作极简,且支持进程异常自动重启。
为什么推荐这种方式?
Section titled “为什么推荐这种方式?”- 零侵入性:无需修改镜像内部的系统文件,配置完全由控制台下发。
- 进程守护:当程序因为内存溢出(OOM)或代码报错异常退出时,系统会自动将其拉起(Auto Restart)。
- 日志集成:程序的输出可以直接重定向到标准输出,在控制台的”容器日志”面板即可实时查看,排错极其方便。
核心操作步骤
Section titled “核心操作步骤”1. 在控制台进入启动命令配置
Section titled “1. 在控制台进入启动命令配置”- 在云主机列表页,点击进入目标实例的详情页。
- 切换到 “设置” 选项卡。
- 找到 “启动命令配置” 区域。
2. 填写配置块
Section titled “2. 填写配置块”在 “运行参数” 文本框中(点击”添加启动参数”展开),直接粘贴您的 Supervisord 配置块。以下是一个标准的 Python 程序配置模板:
[program:my_python_app]command=python /x/y/z/main.pyautostart=trueautorestart=truestdout_logfile=/dev/stdoutstderr_logfile=/dev/stderr⚠️ 重要警告:关于”运行命令”
如果您在”运行参数”中填写了配置,强烈建议同时在”运行命令”框中填写镜像默认的解释器路径(通常为
/bin/bash 或
/usr/bin/supervisord)。如果留空,运行参数可能会覆盖镜像默认的
ENTRYPOINT,导致容器启动失败。
3. 保存并应用
Section titled “3. 保存并应用”点击右侧的 “保存” 按钮,然后点击页面底部的 “应用修改”。系统会重启云主机,您的程序将在开机后自动运行。
常见场景配置示例
Section titled “常见场景配置示例”场景一:启动带有虚拟环境的 Python 程序
Section titled “场景一:启动带有虚拟环境的 Python 程序”如果您使用了 Conda 或 venv,必须在 command 中使用虚拟环境内 Python
解释器的绝对路径,而不能直接写 python。
[program:api_service]
command=/opt/conda/envs/myenv/bin/python /data/project/app.pyautostart=trueautorestart=truestdout_logfile=/dev/stdoutstderr_logfile=/dev/stderr场景二:启动 ComfyUI / Stable Diffusion WebUI
Section titled “场景二:启动 ComfyUI / Stable Diffusion WebUI”这类应用通常通过 shell 脚本启动(如 start.sh 或 webui.sh)。
[program:comfyui]
directory=/data/ComfyUIcommand=/bin/bash -c "./start.sh --listen --port 8188"autostart=trueautorestart=truestdout_logfile=/dev/stdoutstderr_logfile=/dev/stderr场景三:多服务并发启动
Section titled “场景三:多服务并发启动”如果您需要同时启动一个后端 API 和一个前端页面,可以在同一个文本框内连续粘贴多个配置块。
[program:backend_api]command=/opt/conda/bin/python /data/backend/main.pyautostart=trueautorestart=truestdout_logfile=/dev/stdoutstderr_logfile=/dev/stderr
[program:frontend_web]command=npm run startdirectory=/data/frontendautostart=trueautorestart=truestdout_logfile=/dev/stdoutstderr_logfile=/dev/stderr常见问题排查 (FAQ)
Section titled “常见问题排查 (FAQ)”Q1:配置了自启动,但程序没有运行,如何排查?
答:由于我们在配置中将 stdout_logfile 和 stderr_logfile 设置为了/dev/stdout 和 /dev/stderr,程序的所有输出都会被捕获。请前往控制台的”日志/事件/终端 -> 容器日志”面板,您会直接看到报错信息(如”文件不存在”、“ModuleNotFoundError”等)。
Q2:日志显示 can't find command?
答:这通常是因为环境变量没有加载。Supervisord 启动进程时,默认只有极少的环境变量。强烈建议在 command中使用绝对路径(例如 /usr/local/bin/node 而不是 node)。
Q3:为什么配置后云主机一直处于”启动中”或不断重启?
答:可能是您的程序启动即崩溃,触发了 autorestart=true的无限循环。请立即前往”容器日志”面板,勾选**“显示上一个容器退出时的日志”**,查看导致崩溃的致命报错。