Bash

在 OS X 中使用 RVM 創建 Ruby 啟動任務時出錯

  • December 14, 2015

我想定期執行基於 ruby​​ gem 的命令。我正在使用 RVM 並按照此處列出的教程進行操作。

我的 ruby​​ 任務被呼叫daily_checks.rb,如下所示:

#!/usr/bin/env ruby
puts 'in here'
Dir.chdir('/Users/Chris/Documents/Sites/mentor') do
 audit = `bundle-audit`
 system(%(osascript -e 'display notification "#{audit}" with title "bundle-audit"'))
end

我已經設置了一個 RVM 別名和一個 bash 文件/usr/local/bin/regular_checks.sh

/Users/Chris/.rvm/wrappers/regular_checks/ruby /Users/Chris/Documents/Sites/mentor/script/daily_checks.rb

當我執行時/usr/local/bin/regular_checks.sh,ruby 文件被執行並成功執行。

然後我在/Users/Chris/Library/LaunchAgents/local.temp.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Disabled</key>
   <false/>
   <key>EnvironmentVariables</key>
   <dict>
       <key>PATH</key>
       <string>/bin:/usr/bin:/usr/local/bin</string>
   </dict>
   <key>Label</key>
   <string>local.temp</string>
   <key>LaunchOnlyOnce</key>
   <false/>
   <key>Program</key>
   <string>/usr/local/bin/regular_checks.sh</string>
   <key>RunAtLoad</key>
   <true/>
   <key>StandardErrorPath</key>
   <string>/tmp/test.stderr</string>
   <key>StandardOutPath</key>
   <string>/tmp/test.stdout</string>
   <key>StartInterval</key>
   <integer>300</integer>
</dict>
</plist>

當我使用 launchControl 執行此作業時,該作業似乎失敗,錯誤號puts 'in here'為 78。ruby 文件中的 未執行。

文件權限與教程中的相同,即

-rwxr--r--  1 Chris  staff   699 24 Nov 20:16 local.temp.plist
-rwxr-xr-x  1 Chris  admin  111 24 Nov 20:10 /usr/local/bin/regular_checks.sh
-rwxr-xr-x  1 Chris  admin   207 25 Nov 13:38 daily_checks.rb

什麼是錯誤 78,為什麼文件執行不正常?

似乎錯誤 78 是因為該/usr/local/bin/regular_checks.sh文件沒有#!/bin/bash作為第一行。文件的完整內容應該是

#!/bin/bash
/Users/Chris/.rvm/wrappers/regular_checks/ruby /Users/Chris/Documents/Sites/mentor/script/daily_checks.rb

引用自:https://serverfault.com/questions/739689