2012-03-20 14 views
0

小さなScalaアプリケーションを作成しました。私はプログラムを開始するApp Traitランナーを含む1つのソースファイルに2つのクラスを持っています。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

スカラは、cronが見ることができる$ PATHにないと思われます。

シェルセッションで次のように試してみてください。

$ which scala 

どちらを出力すべき「/opt/scala/2.9.1/bin/scala」か何かのようなもの。/usr/local、任意の数の場所に置くことができます - javaとunixファイルシステムは本当にうまくいっていません。

だから今は、2つのオプションがあります。システムパスにScalaの生活が(これは通常の編集は/ etc/profileを伴いますが、あなたはので、私は「できるOSを指定していないフォルダを

  • を入れてトン)
  • 確かに言う(簡単)だけで呼び出す/フル/パス/に/ Scalaのではなく、単に「スカラ座」
+0

私はUbuntuを使用しています。 'scala'は/ usr/bin/scalaを出力します。私はフルパスでcronを試しましたが、スクリプトは実行されません。 – user1243091

+0

'/ usr/bin/scala/usr/local/bin/update'をコンソールで実行するとどうなりますか? –

+0

カーソルが点滅していますが、何も起こっていません。ターミナルに戻るにはCTRL + Cを押す必要があります。 – user1243091

1

へのcronエントリを変更scalaコマンドは、コンパイル済みの実行可能なの名前を期待しますオブジェクトまたはスカラスクリプトソース(または実行可能なjarファイル)を実行するものとして含むファイル。

あなたはupdate.scala object update extends App(なしpackage宣言)を持っている場合は、(* .classファイルの束を生産している必要があります)scalac update.scalascala updateを実行する権利のことです。

生成されたクラスファイルが現在のディレクトリにない場合は、-classpathオプションを使用して、scalaにどこを見つけるかを指定する必要があります。 scala -classpath /usr/bin/local update、クラスファイルが実際に/ usr/bin/localにある場合

ファイル/ usr/bin/local/update(この厳密な名前)にscalaスクリプトのソースが含まれていると意味があります(クラスやオブジェクトにラップされていないscala式のシーケンスです)。

関連する問題