0.前言

首先看到这个错误,本身就很有误导性: gunicorn: No such file or directory
root@doupoa:~# systemctl status admin.service
× admin.service - gunicorn daemon for my web application
Loaded: loaded (/etc/systemd/system/admin.service; disabled; preset: enabled)
Active: failed (Result: exit-code) since Wed 2025-08-20 09:32:08 CST; 1s ago
Duration: 783us
Process: 29237 ExecStart=/home/adminServer/.venv/bin/gunicorn -w 5 -k uvicorn.workers.UvicornWorker --access-logfile /home/adminServer/logs/gunicorn_access.log --error-l>
Main PID: 29237 (code=exited, status=209/STDOUT)
CPU: 606us
Aug 20 09:32:08 doupoa (gunicorn)[29237]: admini.service: Failed at step STDOUT spawning /home/adminServer/.venv/bin/gunicorn: No such file or directory
Aug 20 09:32:08 doupoa systemd[1]: Started admini.service - gunicorn daemon for my web application.
Aug 20 09:32:08 doupoa systemd[1]: admin.service: Main process exited, code=exited, status=209/STDOUT
Aug 20 09:32:08 doupoa systemd[1]: adminiLucky.service: Failed with result 'exit-code'.
然后就会开始无止境的:
... -> 查看目录 -> 有这文件啊? -> 重启查看状态 -> 怎么还是找不到? -> 查看目录 -> ...
1.问题解决
先来看一下 admin.service 文件,一切都很正常
[Unit]
Description=gunicorn daemon for my web application
After=network.target
RequiresMountsFor=/home/adminServer/.venv/bin/
[Service]
User=root
Group=root
WorkingDirectory=/home/adminServer
ExecStart=/home/adminServer/.venv/bin/gunicorn -w 5 -k uvicorn.workers.UvicornWorker --access-logfile '/home/adminServer/logs/gunicorn_access.log' --error-logfile '/home/adminServer/logs/gunicorn_error.log' main:app
StandardOutput=append:/home/adminServer/logs/gunicorn.out
StandardError=append:/home/adminServer/logs/gunicorn.err
[Install]
WantedBy=multi-user.target
可以看到我们指定了StandardOutput 和 StandardError 这两个日志输出目录,再结合 systemctl status 的错误信息来看,可以发现一行: Failed at step STDOUT spawning
STDOUT 就是我们指定的目录地址,Failed Spawning就是生成失败,很明显就是路径存在问题。
前往输出目录查看,果然缺少了logs文件夹。补全文件夹后重启服务,运行成功!
2.其他错误码
为此我特意去找了下systemd源码中有哪些错误码,根据原本意思和AI辅助,列出了全部状态码、翻译和可能出现的情况,仅供参考~
| 错误码 | 符号名称 | 翻译 | 可能情况 |
|---|---|---|---|
| 0 | EXIT_SUCCESS | 成功退出 | 进程正常执行完成 |
| 1 | EXIT_FAILURE | 一般性失败 | 进程执行失败,但无具体错误信息 |
| 2 | EXIT_INVALIDARGUMENT | 无效参数 | 传递给命令的参数无效或不正确 |
| 3 | EXIT_NOTIMPLEMENTED | 功能未实现 | 请求的功能尚未实现 |
| 4 | EXIT_NOPERMISSION | 权限不足 | 执行操作所需的权限不足 |
| 5 | EXIT_NOTINSTALLED | 未安装 | 所需的程序或组件未安装 |
| 6 | EXIT_NOTCONFIGURED | 未配置 | 服务或程序未正确配置 |
| 7 | EXIT_NOTRUNNING | 未运行 | 服务或进程未在运行状态 |
| 64-78 | (BSD sysexits.h) | BSD 系统退出码 | 各种 BSD 系统定义的错误情况 |
| 200 | EXIT_CHDIR | 更改目录失败 | 无法切换到指定工作目录 |
| 201 | EXIT_NICE | 设置优先级失败 | 无法设置进程的 nice 值 |
| 202 | EXIT_FDS | 文件描述符操作失败 | 文件描述符操作(如关闭)失败 |
| 203 | EXIT_EXEC | 执行失败 | 无法执行指定的程序或命令 |
| 204 | EXIT_MEMORY | 内存分配失败 | 内存分配或管理操作失败 |
| 205 | EXIT_LIMITS | 资源限制设置失败 | 无法设置进程资源限制 |
| 206 | EXIT_OOM_ADJUST | OOM 调整失败 | 无法调整内存不足时的行为 |
| 207 | EXIT_SIGNAL_MASK | 信号掩码设置失败 | 无法设置进程信号掩码 |
| 208 | EXIT_STDIN | 标准输入设置失败 | 标准输入设置或重定向失败 |
| 209 | EXIT_STDOUT | 标准输出设置失败 | 标准输出设置或重定向失败(当前遇到的错误) |
| 210 | EXIT_CHROOT | chroot 操作失败 | 无法更改根目录 |
| 211 | EXIT_IOPRIO | I/O 优先级设置失败 | 无法设置 I/O 优先级 |
| 212 | EXIT_TIMERSLACK | 定时器松弛设置失败 | 无法设置定时器松弛值 |
| 213 | EXIT_SECUREBITS | 安全位设置失败 | 无法设置安全位 |
| 214 | EXIT_SETSCHEDULER | 调度器设置失败 | 无法设置进程调度策略 |
| 215 | EXIT_CPUAFFINITY | CPU 亲和性设置失败 | 无法设置 CPU 亲和性 |
| 216 | EXIT_GROUP | 组设置失败 | 无法设置进程组 |
| 217 | EXIT_USER | 用户设置失败 | 无法设置用户身份 |
| 218 | EXIT_CAPABILITIES | 能力设置失败 | 无法设置进程能力 |
| 219 | EXIT_CGROUP | cgroup 设置失败 | 无法设置 cgroup |
| 220 | EXIT_SETSID | 会话设置失败 | 无法创建新会话 |
| 221 | EXIT_CONFIRM | 确认操作失败 | 不确定具体含义 |
| 222 | EXIT_STDERR | 标准错误设置失败 | 标准错误设置或重定向失败 |
| 223 | _EXIT_RESERVED | 保留(原用于 TCP Wrapper) | 曾经用于 TCP Wrapper,不应重用 |
| 224 | EXIT_PAM | PAM 认证失败 | PAM(可插拔认证模块)认证失败 |
| 225 | EXIT_NETWORK | 网络配置失败 | 网络配置或设置失败 |
| 226 | EXIT_NAMESPACE | 命名空间设置失败 | 无法设置命名空间 |
| 227 | EXIT_NO_NEW_PRIVILEGES | 权限限制设置失败 | 无法设置无新权限标志 |
| 228 | EXIT_SECCOMP | Seccomp 设置失败 | 无法设置 Seccomp 过滤器 |
| 229 | EXIT_SELINUX_CONTEXT | SELinux 上下文设置失败 | 无法设置 SELinux 上下文 |
| 230 | EXIT_PERSONALITY | 人格设置失败 | 无法设置进程人格(架构仿真) |
| 231 | EXIT_APPARMOR_PROFILE | AppArmor 配置文件设置失败 | 无法设置 AppArmor 配置文件 |
| 232 | EXIT_ADDRESS_FAMILIES | 地址族限制失败 | 无法限制允许的地址族 |
| 233 | EXIT_RUNTIME_DIRECTORY | 运行时目录设置失败 | 无法创建或设置运行时目录 |
| 234 | _EXIT_RESERVED2 | 保留(原用于 kdbus) | 曾经用于 kdbus,不应重用 |
| 235 | EXIT_CHOWN | 所有权更改失败 | 无法更改文件或目录的所有权 |
| 236 | EXIT_SMACK_PROCESS_LABEL | SMACK 进程标签设置失败 | 无法设置 SMACK 进程标签 |
| 237 | EXIT_KEYRING | 密钥环操作失败 | 密钥环操作失败 |
| 238 | EXIT_STATE_DIRECTORY | 状态目录设置失败 | 无法创建或设置状态目录 |
| 239 | EXIT_CACHE_DIRECTORY | 缓存目录设置失败 | 无法创建或设置缓存目录 |
| 240 | EXIT_LOGS_DIRECTORY | 日志目录设置失败 | 无法创建或设置日志目录(当前遇到的问题) |
| 241 | EXIT_CONFIGURATION_DIRECTORY | 配置目录设置失败 | 无法创建或设置配置目录 |
| 242 | EXIT_NUMA_POLICY | NUMA 策略设置失败 | 无法设置 NUMA 策略 |
| 243 | EXIT_CREDENTIALS | 凭据设置失败 | 无法设置进程凭据 |
| 244 | EXIT_BPF | BPF 设置失败 | 无法设置 BPF(伯克利包过滤器) |
| 245 | EXIT_KSM | KSM 设置失败 | 无法设置 KSM(内核同页合并) |
| 255 | EXIT_EXCEPTION | 异常退出 | 进程因异常或信号而退出 |
发表回复