我想設置一個簡單的計時器,從Rails應用程序開始。該計時器應等待其持續時間,然後啓動一個shell腳本,該腳本將啓動./script/runner並完成初始請求。我需要腳本/跑步者,因爲我需要訪問ActiveRecord。unix at命令將變量傳遞給shell腳本?
下面是我的Rails測試線
output = `at #{(Time.now + 60).strftime("%H:%M")} < #{Rails.root}/lib/parking_timer.sh STRING_VARIABLE`
return render :text => output
然後我parking_timer.sh看起來像這樣
#!/bin/sh
~/PATH_TO_APP/script/runner -e development ~/PATH_TO_APP/lib/ParkingTimer.rb $1
echo "All Done"
最後,ParkingTimer.rb讀取與
ARGV.each do|a|
puts "Argument: #{a}"
end
的傳遞變量問題在於Unix命令「at」似乎不喜歡變量,只想處理filena MES。我要麼得到取決於如何我位置的兩個錯誤之一「S
如果我把引號的右手邊,像這樣
...‘〜/ PATH_TO_APP/lib中/ parking_timer.sh字符串變量’
我得到的,
-bash:〜/ PATH_TO_APP/lib中/ parking_timer.sh字符串變量:沒有這樣的文件或目錄
II假牛逼他引用了,我得到的,
在:亂碼時間
這一切發生上運行Rails的2.3 &紅寶石在Mac OS 10.6盒1.8.6
我已經搞砸圍繞w/BackgrounDrb,並決定其總PITA。我需要能夠在任何時候取消工作。
我能夠得到它至少編譯和運行,而不會隨身攜帶垃圾, 'at -t \「#{(Time.now + 60).strftime(」%m%d%H% M 「)} \」< 「#{Rails.root} /lib/parking_timer.sh」, 「4」' 然而,它不通過可變而直接調用腳本,它的作用。 SH parking_timer.sh 4 這似乎並不重要,如果我身邊有4與否或周圍的腳本路徑引號。 – Andrew 2010-03-31 18:42:46
我做了一些調查後做了一些重大修改。 – 2010-03-31 20:11:31
謝謝,明白了這個 輸出='#{工作} Rails.root /腳本/亞軍-e發展#{} Rails.root#/lib/ParkingTimer.rb {4.to_s} | at -t#{(Time.now + 60).strftime(「%m%d%H%M」)}' 它完全繞過了.sh腳本,但又如此。 輸出仍然是空白,這可能會導致我在路上遇到問題,(如果需要,找不到要刪除的作業)。 – Andrew 2010-03-31 20:45:30