Как запустить программу Scala через cron? - PullRequest
1 голос
/ 20 марта 2012

Я написал небольшое приложение для Scala.У меня есть 2 класса в одном исходном файле, включая бегунка App App для запуска программы.Он отлично работает, когда я запускаю его в терминале:

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 ]

3 голосов
/ 20 марта 2012

Я подозреваю, что scala не находится в $ PATH, где cron может его увидеть.

Попробуйте следующее в сеансе оболочки:

$ which scala

Который должен вывести что-то вроде "/ opt /scala / 2.9.1 / bin / scala "или что-то в этом роде.Может быть в / usr / local, любое количество мест - java и файловая система unix не очень хорошо играют вместе.

Так что теперь у вас есть два варианта:

  • Поместитепапка, в которой scala находится по системному пути (обычно это включает редактирование / etc / profile, но вы не указываете ОС, поэтому я не могу сказать наверняка)
  • (проще) Просто измените cronзапись для вызова / full / path / to / scala, а не просто "scala"
2 голосов
/ 21 марта 2012

Команда 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.

Сказать scala /usr/bin/local/update было бы целесообразно, если бы файл / usr / bin / local / update (это точное имя) содержал источник сценария scala (более или менее последовательность выражений scala, не заключенная в класс или объект).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...