在日常开发中,经常会遇到需要运行 ref="/tag/2028/" style="color:#2B406D;font-weight:bold;">Ruby 脚本的场景。比如写了个自动化处理文件的小工具,或者调试一段爬虫代码,这时候就得让 Ruby 进程跑起来。其实启动一个 Ruby 进程并不复杂,只要会敲命令就行。
最简单的启动方式
假设你已经写好了一个名为 hello.rb 的文件,内容如下:
puts "Hello, I'm running!"
只需要打开终端,进入该文件所在目录,输入:
ruby hello.rb
回车后就能看到输出结果。这条命令的意思是:用 ruby 解释器执行 hello.rb 文件,系统会自动创建一个对应的进程来运行它。
后台运行 Ruby 进程
有时候你不希望脚本占用当前终端窗口,比如要处理一个长时间任务。这时可以让进程在后台运行:
ruby hello.rb &
末尾的 & 表示把任务放到后台执行。终端不会被阻塞,你可以继续做别的事。如果想查看这个进程有没有真正在跑,可以用:
ps aux | grep ruby
这条命令会列出所有包含 ruby 的进程信息,一眼就能看出你的脚本是不是活蹦乱跳地运行着。
带参数启动 Ruby 脚本
实际项目中,脚本往往需要接收外部输入。比如你有个处理日志的脚本,得告诉它处理哪个文件。可以这样传参:
ruby process_log.rb access.log
在 process_log.rb 里通过 ARGV 就能拿到参数:
filename = ARGV[0]
puts "Processing #{filename}..."
每次启动时换不同的文件名,灵活性就上来了。
用 nohup 保证进程不中断
如果你通过 SSH 登录服务器跑脚本,网络一断,进程可能就挂了。为了避免这种情况,可以用 nohup 命令:
nohup ruby long_task.rb &
这样即使关闭终端,进程依然在后台默默工作。输出的日志默认会保存到当前目录的 nohup.out 文件里,方便后续查看。
通过 Rake 启动特定任务
在 Rails 项目中,通常不会直接运行 ruby 文件,而是用 Rake 管理任务。比如执行数据库迁移:
rake db:migrate
这背后其实也是启动了一个 Ruby 进程,只不过由 Rake 工具封装好了流程。你也可以自定义任务,在 Rakefile 里写好逻辑,然后一键触发。
监控并管理进程
脚本跑起来了,但怎么知道它还在不在?除了前面提到的 ps,还可以用 kill -0 进程ID 检查进程是否存在:
kill -0 12345
如果返回成功,说明进程还活着;失败则表示已经退出。配合脚本使用,能实现自动重启或告警功能。
启动 Ruby 进程的方式多种多样,选哪种取决于你的具体需求。本地测试用 ruby file.rb 最快,服务器部署考虑加 nohup 或结合进程管理工具如 systemd、supervisor,保持服务稳定运行。