LinuxForum.Fans
Тема

Запуск терминальной сессии в cron

Автор: iurum 16 сообщений 5091 просмотров
#168706

Приветствую!
Прошу помощи по следующему вопросу. Есть необходимость запускать по расписанию некую терминальную сессию - rdesktop server. Руками из терминала - без проблем, тут же пишу crontab -e: 00 09 * * * export DISPLAY=:0.0 && rdesktop server и решительно ничего не происходит... Пробовал и под root' ом - безрезультатно. В логе имеем: /USR/SBIN/CRON[9396]: (CRON) error (grandchild #9398 failed with exit status 1)
Как же быть?
Терминальная сессия должна быть запущена, потому что в ней регулярно выполняется gui-приложение, и выполняется оно только в активной сессии...

#168712

создай отдельно скрипт, например

text

#!/bin/sh
#/home/term

export DISPLAY=:0.0 rdesktop server

присвой ему права на запуск
[console]#chmod 755 /home/term[/console]

и уже его забивай в кронтаб, на всяк случай сделай вывод в отдельный файл - может проблемы с запуском

text
00 09 * * * /home/term >> /var/log/term

и не забудь создать файл /var/log/term

#168714

ммм... напиши скрипт-однострочник, который запускает терминальную сессию.
помести его в /usr/sbin, сделай на него chmod +x
проверь, что он запускается просто по имени:
[console]# sript_name[/console]
и вот этот скрипт уже засунь в cron

P.S. Пока писал пост уже w03zd8rc запостил мысль :D

#168723

Все выполнил, согласно рекомендаций w03zd8rc... Доходит дело до запуска - тишина. В логе пусто. Попробовал под рутом - тоже никакого эффекта.
Сам скрипт запускается нормально... У меня такое подозрение, что с кроном что-то не то... Как проверить?

#168750

iurum, пару примеров для проверки, только так как я показал, несколько не правильно:
под рутом:

text
$ nano /etc/crontab

# каждые 20 минут */30 * * * * root echo "Hello! каждые 20 минут" >> /tmp/crontest # каждый день в 7:30 30 6 * * * root echo "Hello! каждый день в 7:30" >> /tmp/crontest

Результат лови в /tmp/crontest

Правильно через crontab -e

#168870

1. Создал /tmp/crontest
2.

text
# crontab -e

3.

text
0-59 * * * * root  echo "Тест!" >> /temp/crontest

4.

text
/etc/init.d/cron restart

5. проверяю /temp/crontest - ничего нет :( Пробовал и фикированное время задавать, запускал crontab под простым пользователем - не идет и все!

#168913
iurum написал:

3.
text
0-59 * * * * root  echo "Тест!" >> /temp/crontest

Так не пишется.

text
* * * * * root  echo "Тест!" >> /temp/crontest
#168920

ну, в общем с собственно cron' ом разобрался

делаю

text
0-59 * * * * echo "Тест!" >> /var/log/term

все работает, т.е. каждую минуту молотит запись Тест! в /var/log/term..

далее, вместо echo "Тест!" подставляю:

text
0-59 * * * * /usr/sbin/term  >> /var/log/term

где скрипт term содержит

text
#!/bin/sh
#/usr/sbin/term

export DISPLAY=:0.0 rdesktop server

и все - ни rdesktop не запускается, ни в логе ничего нет :(

вручную скрипт запускается без проблем

#168936

iurum, вручную от кого (имя пользователя) запускаешь, и куда юзера дел из кронтаба, я ж написал пример... :(

#168938
iurum написал:
0-59 * * * * /usr/sbin/term >> /var/log/term

1)

text
0-59 * * * * /usr/sbin/term 2>&1 >> /var/log/term

2) файл /var/log/term не только должен существовать, но и права у него должны быть 0666

3) редактируйте юзерским crontab -e

4) добавте в скрипт export HOME=/home/user (что там у вас?)
export PATH=.... пути ко ВСЕМ вашим программам(командам) что вы юзаете. Через :
(совет можете скопипастить вывод exho $PATH, если лениво)

#168948
newzenon написал:
iurum, вручную от кого (имя пользователя) запускаешь, и куда юзера дел из кронтаба, я ж написал пример... :(

юзер в кронтабе был прописан - не идет так, убрал - заработало

#168964
iurum написал:
юзер в кронтабе был прописан - не идет так, убрал - заработало

дык и не надо было ставить.

Просмотр crontab'а: crontab -l
Изменение crontab -e

писать юзеров НЕ надо. Надо выполнять команды от нужного юзверя.

newzenon написал:
я ж написал пример...

дык он только у вас и сработает. потому как делаете вы неправильно.

#168990

Ну уже все перепробовал - ни в какую!

Вот последовательность ( еще раз) :

1. Создаю файл скрипта: /usr/sbin/term с содержанием:

text
#!/bin/sh
#/usr/sbin/term

export HOME=/home/user # здесь имя пользователя, по этому пункту - непонятно его назначение.. export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin:/ export DISPLAY=:0.0 rdesktop server

с правами 755. Пробую запуск вручную - работает и от root и от user

2. Создаю log /var/log/term c правами 666
3. Запускаю crontab -e от user, прописываю:

text
0-59 * * * * /usr/sbin/term 2>&1 >> /var/log/term

- НИЧЕГО НЕ ПРОИСХОДИТ!
4. Проверяю работу cron: crontab -e от user

text
0-59 * * * * echo "TEST!!!"  >> /var/log/term

все работает, в лог пишет!
Если запускать crontab от root'a - все тоже самое... :(

#169050
iurum написал:
- НИЧЕГО НЕ ПРОИСХОДИТ!

пустая строка в конце файла, когда редактируете crontab есть?

ЗЫЖ должно работать - с виду всё верно... в /var/log/{messages,syslog} тоже ничего?
в почте может быть? (почту можно почитать обычно командой mail, от рута рутову, от юзера юзерскую)

#170301

пустая строка есть..

в /var/log/syslog - пишет:

/USR/SBIN/CRON[6128]: (CRON) error (grandchild #6129 failed with exit status 1)

#171556

Вот удивительная вещь! Просто в crontab прописал под user:

text
20 11 * * * env DISPLAY=:0.0 rdesktop server

- все заработало.. Но работало только до перезагрузки.. Теперь опять все мертво. Отказываюсь уже что-либо понимать :(

Войдите или зарегистрируйтесь, чтобы ответить.