我写了一个小的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 $@
!#
有没有人有这方面的经验? 提前谢谢。
答案 0 :(得分:3)
我怀疑scala不在$ PATH中,cron可以在那里看到它。
在shell会话中尝试以下操作:
$ which scala
哪个应输出类似" /opt/scala/2.9.1/bin/scala"或者其他的东西。可以在/ usr / local,任意数量的地方 - java和unix文件系统不能很好地一起玩。
所以现在你有两个选择:
答案 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
是有意义的)。