-
Notifications
You must be signed in to change notification settings - Fork 1
ZH CN Configuration
Procodile 使用 Procfile 来定义进程,也可以通过同目录下的 Procfile.options 和 Procfile.local 文件提供额外配置。
Procfile 用来定义进程名和命令:
web: bundle exec puma -C config/puma.rb
worker: bundle exec rake app:worker进程名在大小写不敏感的意义下必须唯一。例如,web 和 Web 会被视为重复,因此不允许同时存在。
Procodile 支持直接在 Procfile 里定义定时进程。
使用 __AT__ 分隔进程名和 cron 表达式:
"cleanup__AT__*/10 * * * * *": bundle exec rake cleanup注意:
-
__AT__必须使用大写的AT,并且左右两侧都必须恰好有两个下划线。 - cron 表达式使用五个或六个以空格分隔的字段:
- second(可选)
- minute
- hour
- day
- month
- weekday
- 可选的
second字段是在传统五字段 crontab 语法基础上的扩展。
你也可以在 options files 中通过 processes.<name>.at 来定义 schedule。更完整的说明见 定时进程。
这里统称 Procfile.options 和 Procfile.local 为 options files。
在 options files 中,进程名必须和 Procfile 中的条目完全一致。
Procfile.options 用来存放通常应该随应用一起提交的共享配置。
# 在 status 输出和其他用户可见消息中显示的应用名
app_name: Llama Kit
# 应用的绝对路径(可选,但在使用符号链接部署时很有用)
root: /absolute/path/to/app
# 存放所有 PID 文件的目录(默认是 `pids`)
pid_root: tmp/procodile-pids
# Procodile supervisor 日志文件的路径
# 默认是应用根目录下的 `procodile.log`
log_path: log/procodile.log
# 每个进程单独日志文件的目录。如果设置了这个目录,
# 每个进程都可以写到独立文件,而不是共用 procodile.log
log_root: log
# 应用应该以哪个用户身份运行。如果指定,Procodile 会通过 sudo
# 以该用户重新执行自身,因此 supervisor 和托管进程都会以该用户运行。
user: rails
# 如果你的应用提供 console,可以在这里配置,这样 `procodile console`
# 就能在应用环境已经加载好的情况下启动它。
console_command: bundle exec rails console
# 提供给所有子进程的环境变量
env:
RAILS_ENV: production
SECRET_KEY_BASE: XXX
# 按进程分别配置的选项
processes:
web:
# 需要启动多少个该类型的实例(默认是 1)
quantity: 2
# 该进程的 STDOUT/STDERR 输出写到哪里(默认写到 procodile.log,
# 如果配置了 log_root,也可能写到对应目录下)
log_path: log/processes/web.log
# 如果没有设置 log_path,则在 log_root 下使用的文件名
log_file_name: webserver.log
# 该进程使用哪种重启模式(默认是 term-start)
# 见 [[重启模式|ZH-CN-Restart-Modes]]。
restart_mode: usr2
# 在 respawn window 内允许的最大自动拉起次数(默认是 5)
max_respawns: 10
# respawn window 的大小,单位是秒(默认是 3600)
respawn_window: 300
# 停止该进程时发送的信号(默认是 TERM)
term_signal: INT
# 如果设置了这个值,Procodile 会自动为该进程的实例分配 `PORT`,
# 从这个端口号开始往上找
allocate_port_from: 7000
# 端口分配时使用的网络协议。
# 支持 tcp 和 udp(默认是 tcp)。代理功能要求使用 tcp。
network_protocol: tcp
# 当 supervisor 级别的 proxy 模式开启时,为该进程配置代理监听地址和端口。
# 默认没有 proxy port,默认地址是 127.0.0.1。
proxy_port: 5050
proxy_address: 0.0.0.0
# 提供给该进程所有实例的环境变量
env:
PORT: 5500
cron_cleanup:
# 按计划执行这个进程。cron 表达式使用五个或六个以空格分隔的字段。
# 如果存在,可选的第一个字段是 second。
at: "*/10 * * * * *"
# 如果以后把一个已存在的 scheduled process 的 `at` 删掉然后执行 reload,
# 当前实现会把它当作普通的 long-running process 来处理。
# 每次调度运行都会在这里指定的秒数范围内随机向后延迟。
random_delay: 600Procfile.local 用来存放机器本地或部署相关的覆盖配置,通常不会提交到版本库。
和上面一样,你不需要把所有选项都写一遍,只需要写你想覆盖的部分即可。
processes:
worker:
quantity: 4除了使用 Procfile 里的特殊语法,你也可以在 options files 里通过 at: 来定义 schedule:
processes:
cron_cleanup:
# 按计划执行这个进程。cron 表达式使用五个或六个以空格分隔的字段。
# 如果存在,可选的第一个字段是 second。
# WARNING: 如果以后把一个已存在的 scheduled process 的 `at` 删掉然后执行
# reload,当前实现会把它当作普通的 long-running process 来处理。
at: "*/10 * * * * *"
# 每次调度运行都会在这里指定的秒数范围内随机向后延迟。
random_delay: 600这和在 Procfile 里写成 cron_cleanup__AT__*/10 * * * * * 是等价的。
全局环境变量可以定义在 env 下,按进程的环境变量可以定义在 processes.<name>.env 下。
如果启动 supervisor 时使用了 --env-file,优先级是:process env > env file > global env。详情见 环境文件。
服务器级配置允许你定义一个或多个应用,这样你就可以在不先进入应用目录的情况下直接执行 procodile 命令。Procodile 会自动确保命令在正确的应用上下文中执行。
这个文件应该放在 /etc/procodile。
root: /opt/appmail/app/current如果你的服务器上有多个应用,也可以把它们都定义在这个文件里。执行 procodile 时,会提示你选择其中一个应用。
-
name: Widgets App
root: /path/to/widgets/app
-
name: Another App
root: /path/to/another/app