2012-03-20 106 views
0

我寫了一個小型的Scala應用程序。我在一個源文件中有兩個類,包括App trait runner來啓動程序。當我在終端中運行它時,它工作得很好:如何通過cron運行Scala程序?

scalac update.scala // compiling 
scala update // run it 

現在我想用cron作業來運行它。爲此,我編輯了sudo crontab -e並添加了這個內容:

*/2 * * * * scala /usr/bin/local/update 

並且使腳本可執行,但沒有任何事情發生。我不知道該怎麼做: 我必須爲此製作一個jar文件嗎? 我是否必須在課前添加該課程?

#!/bin/sh 
exec scala -savecompiled $0 [email protected] 
!# 

有沒有人有這方面的經驗? 在此先感謝。

回答

3

我懷疑scala不在$ PATH中,cron可以看到它。

嘗試在shell會話如下:

$ which scala 

應輸出類似 「/opt/scala/2.9.1/bin/scala」 什麼的。可以在/ usr/local,任意數量的地方 - java和unix文件系統不會很好地一起玩。

所以,現在你有兩個選擇:

  • 把文件夾中階生命系統路徑(這通常會涉及編輯/ etc/profile文件,但你不指定操作系統,所以我可以」牛逼肯定地說)
  • (容易)只是改變了cron項調用/全/路徑/到/階而不僅僅是「斯卡拉」
+0

我在使用Ubuntu。 'scala'輸出/ usr/bin/scala。我嘗試了完整路徑的cron,但腳本無法運行。 – user1243091 2012-03-20 20:11:40

+0

如果在控制檯中運行'/ usr/bin/scala/usr/local/bin/update',會發生什麼? – 2012-03-20 20:17:06

+0

遊標正在閃爍,但沒有其他事情發生。我需要按CTRL + C才能返回到終端。 – user1243091 2012-03-20 20:24:07

1

scala命令期望的編譯運行的名字對象包含scala腳本源文件(或可運行的jar文件)作爲要運行的文件的文件。

如果您在update.scala object update extends App(沒有包聲明)有再經過scalac update.scala(應該已經產生了一堆的* .class文件)scala update是運行正確的事情。

如果生成的類文件不在當前目錄中,那麼應該使用-classpath選項來告訴scala在哪裏找到它們,例如。 scala -classpath /usr/bin/local update,如果類文件確實在/ usr/bin/local中。

如果文件/ usr/bin/local/update(這個確切的名稱)包含scala腳本源(或多或少是一個不包含在類或對象中的scala表達式序列),那麼它會有意義。