如何通过cron运行Scala程序?

时间:2012-03-20 19:16:52

标签: linux scala cron

我写了一个小的Scala应用程序。我在一个源文件中有2个类,包括App trait runner以启动程序。当我在终端中运行它时它工作正常:

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 $@
!#

有没有人有这方面的经验? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

在shell会话中尝试以下操作:

$ which scala

哪个应输出类似" /opt/scala/2.9.1/bin/scala"或者其他的东西。可以在/ usr / local,任意数量的地方 - java和unix文件系统不能很好地一起玩。

所以现在你有两个选择:

  • 将scala所在的文件夹放在系统路径中(这通常涉及编辑/ etc / profile,但是你没有指定操作系统,所以我不能肯定地说)
  • (更简单)只需将cron条目更改为call / full / path / to / scala而不仅仅是" scala"

答案 1 :(得分:2)

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表达式序列),则说scala /usr/bin/local/update是有意义的)。