Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Cron не выполняет скрипт  (Прочитано 3717 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Serbis

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Cron не выполняет скрипт
« : 01 Октября 2015, 12:57:28 »
В общем вот какая проблема.

Есть скрипт
#!/bin/sh
sudo -u serbis java -jar folderencrypt.jar

Он прекрасно работает и из терминала и при вызове из иксов. Мне нужно его поставить в cron задание на выполнение раз в минуту. В локальном кроне crotnab -e создаю запись.

*/1 * * * * /home/serbis/folderencrypt/folderencrypt.sh

Ну и собственно никакой реакции. Проверил то же на вызове диалога проверки, работает, а скрипт не хочет выполнять и все тут. В чем причина?

Добавил в скрипт вывод диалога DISPLAY=:0 gdialog --msgbox "It work encrypt\!" 25 20 > /dev/null, работает, а запуск jar игнорируется и в чем тут юмор?
« Последнее редактирование: 01 Октября 2015, 13:20:17 от Serbis »

Оффлайн wajnon

  • Старожил
  • *
  • Сообщений: 2778
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #1 : 01 Октября 2015, 14:37:45 »
Serbis,
Цитировать
Мне нужно его поставить в cron задание на выполнение раз в минуту.
Зацикли в самом скрипте исполнение каждую минуту, и кинь в автозагрузку, как вариант

Оффлайн Serbis

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #2 : 01 Октября 2015, 15:32:03 »
wajnon,
Ну в общем-то вариант, довольно неплохой. Спасибо за подсказку. Но все таки, уже из чистого интереса, почему из под крона скрипт не работает, понятно что что-то не так с правами на исполнение, только вот что? Переделал под системный контаб, с указанием пользователя, все равно не работает. Что интересно, есть еще одна моя программка на джаве, только уже с интерфейсом. Сделал для нее такой же скрипт, и ярлык .desktop, там вот такая же фигня, просто скрипт запускается, а если найти ярлык через поиск, то та же бадягя что и с кроном, ингор команды запуска вм.

Оффлайн wajnon

  • Старожил
  • *
  • Сообщений: 2778
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #3 : 01 Октября 2015, 15:47:03 »
Serbis,
а если без sudo -u serbis работает?

Оффлайн Serbis

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #4 : 01 Октября 2015, 15:56:08 »
wajnon,
Нет, более того, добавил в автозагрузку, та же ситуации, запуск вм игнорируется. sudo -u serbis там потому что запуск java требует прав суперпользователя. Я добавил для пользователя serbis права исполнения файла от рута без запроса пароля.

Зашел из под рута, выполнил скрипт, все нормально. Получается какая-то мистика, если я запускаю скрипт в ручную он работает, если системы, то нет, бред...
« Последнее редактирование: 01 Октября 2015, 16:03:57 от Serbis »

Оффлайн wajnon

  • Старожил
  • *
  • Сообщений: 2778
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #5 : 01 Октября 2015, 16:05:56 »
Serbis,
а Java знает где лежит folderencrypt.jar? может стоит прописать полный путь в самом скрипте?

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13758
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #6 : 01 Октября 2015, 16:16:03 »
* * * * * /usr/bin/java -jar /home/serbis/folderencrypt/folderencrypt.jar

Оффлайн Serbis

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #7 : 01 Октября 2015, 16:28:44 »
wajnon,
Вот уже попробовал полные пути тот же эффект.
fisher74,
Не работает джава без sudo, но с ним тоже не запускается. Вот в терминале набираю /home/serbis/folderencrypt/folderencrypt.sh и все запускается. Руками в наутилусе тыкаю на файл, и папка нужная шифруется. А вот ни кроном, ни автозапуском, ни ярлыком не прокатывает. Больше всего меня в этой ситуации забавляет то, что на написание программы у меня ушло полтора часа, а на попытки наладить ее автозапуск уже больше восьми, и безрезультатно.

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5632
  • Все по палатам!
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #8 : 01 Октября 2015, 16:36:04 »
Serbis, а если от root в кронтаб записать
Извините, я все еще учусь

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13758
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #9 : 01 Октября 2015, 16:44:53 »
Не работает джава без sudo
Бред. Или делайте оговорку, что jar делает какие-то непристойные простого пользователя операции.

А вот ни кроном, ни автозапуском, ни ярлыком не прокатывает.
Что в логе крона?

Перенаправьте в лог выполнение скрипта:
* * * * * /usr/bin/java -jar /home/serbis/folderencrypt/folderencrypt.jar > /home/serbis/folderencrypt/folderencrypt.log 2>&1

Оффлайн Serbis

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #10 : 01 Октября 2015, 17:03:03 »
fisher74,
BINGO!!! Вопрос решился. Ошибка - мое плохое понимание работы командной оболочки. При запуске из терминала, загрузка происходит из исков. При запуске из крона через tty. А так как программа является кусом другой программы написанной на JavaFx, она при запуске, даже работая в фоновом режиме проводит инициализацию с GTK. Естественно попытка обратиться с иксам в режиме tty приводит вот такой вот лаже.

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.UnsupportedOperationException: Unable to open DISPLAY
at com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:68)
at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
at com.sun.glass.ui.Application.run(Application.java:146)
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:263)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
... 5 more

Решением стало добавление указателя на экран в команде крона

* * * * * DISPLAY=:0 /usr/bin/java -jar /home/serbis/folderencrypt/folderencrypt.jar

Всем спасибо!
« Последнее редактирование: 01 Октября 2015, 17:33:15 от Serbis »

Оффлайн _art_

  • Активист
  • *
  • Сообщений: 377
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #11 : 01 Октября 2015, 17:41:20 »
Так это самое, для gui-приложений в кроне нужно указывать DISPLAY

48 12 * * * 'export DISPLAY=:0 && /usr/bin/thunderbird'

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13758
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #12 : 01 Октября 2015, 17:57:31 »
Serbis уже указал, причём с более подходящим для crontab-а синтаксисом.
Тем более GUI там по факту не используется, исключительно костыль для инициализации стороннего куска кода.

Оффлайн _art_

  • Активист
  • *
  • Сообщений: 377
    • Просмотр профиля
Re: Cron не выполняет скрипт
« Ответ #13 : 01 Октября 2015, 18:05:13 »
Мм, не знал, что можно без export делать.

 

Страница сгенерирована за 0.063 секунд. Запросов: 25.