我有一个 launchctl 工作,我定义如下:
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>~/projects/script.sh</string>
</array>
当我手动运行 script.sh 时,该脚本运行良好,因为它使用当前配置的 ruby 的 rvm 版本。当我通过 launchctl 运行此脚本时,系统使用了 Ruby 的某个版本,这会破坏脚本。如何在有正确版本的 Ruby 的情况下运行此脚本?
答案1
在调用任何依赖于正确设置的程序之前,更改script.sh
为设置环境变量。PATH
PATH
答案2
最好的方法是使用 rvm“包装器”,它会加载 ruby 环境然后运行脚本。更多信息:
$ rvm help wrapper
例子:
$ rvm wrapper 2.0.0 hello
$ hello_ruby -e "puts RUBY_VERSION"
$ hello_rake -T
$ which hello_ruby # => /Users/me/.rvm/bin/hello_ruby
...ETC...
您可以在 launchd 配置中使用“/Users/me/.rvm/bin/hello_ruby”作为可执行文件,然后 rvm 环境将为您设置。
这也非常好,无需指定确切的 ruby 版本,因此当补丁级别出来时,升级 rvm 并且您的包装器将指向较新的修补 ruby,而无需卸载/加载启动文件。