LINUX.ORG.RU
решено ФорумAdmin

Не понимаю работу cron, или не получается настроить его

 , ,


0

2

На данный момент у меня Debian Trixie, не могу никак понять работу демона cron и как его правильно настроить.

Для теста решил написать cron job, который выводит каждую минуту уведомление с фразой «Hello World».

Логи демона cronie выводят предположительно то, что мне и нужно, но уведомление не отображается.

Nov 14 11:23:00 trixie-sid CROND[1859]: (gramevar) CMD (/usr/bin/dunstify "Hello" "World")
Nov 14 11:23:00 trixie-sid CROND[1856]: (gramevar) CMDEND (/usr/bin/dunstify "Hello" "World")
Nov 14 11:23:00 trixie-sid CROND[1856]: pam_unix(cronie:session): session closed for user gramevar

Решил попробовать по совету https://stackoverflow.com/a/53524203, но и это не дало своих плодов.

Для теста решил написать cron job, который выводит каждую минуту уведомление с фразой «Hello World».

Куда выводит-то? Куда выводишь, там и смотри.

Логи демона cronie выводят предположительно то, что мне и нужно, но уведомление не отображается.

Так это логи демона, а не твоего скрипта.

wandrien ★★★
()

не могу никак понять работу демона cron

Выполняет задачи по заданному расписанию.

и как его правильно настроить.

Что не получается?
Ну и что бы два раза не вставать cronie это таки форк cron.

anc ★★★★★
()
Ответ на: комментарий от yukiome

Просто уведомление на экран и выводиться должно

На какой и чей экран?

anc ★★★★★
()
Ответ на: комментарий от yukiome

С чего ты решил, что оно кому-то что-то должно? Ты точно там проблему ищешь?

Где скрипт, который ты кроном вызываешь?

mogwai ★★★★★
()
Ответ на: комментарий от yukiome

Если под экраном имеется в виду графическая сессия пользователя, то программе нужен доступ к пользовательскому сеансу. Магически он не появится, скрипт запущен в другом окружении.

Для использования notify-send например так: https://forums.linuxmint.com/viewtopic.php?t=396123

wandrien ★★★
()
Ответ на: комментарий от wandrien

Вот пример скрипта. Он работает, если напрямую запустить, но с cron не получается это реализовать

#!/bin/bash

export NOTE_DIR=~/dir

cd $NOTE_DIR
git add -A 
git commit --allow-empty-message -m ''

if [ ! -z "$(timeout 1 ping 8.8.8.8 2>/dev/null)" ]; then
    git push origin main -f 
    dunstify "Git Notes" "Sync with repo succeed"
else
    dunstify -u critical "Network Error" "Sync with repo NOT succeed"
fi


yukiome
() автор топика
Ответ на: комментарий от wandrien

+1, скорее всего демон проклинает под рутом (или отдельным пользователем).

Bfgeshka ★★★★★
()
Ответ на: комментарий от anc

Маны курить, это база, которой не следовал я, к сожалению

yukiome
() автор топика
Ответ на: комментарий от yukiome

Попробуй выполнить команду env от пользователя, и в кронджобе, и ты увидишь насколько они разные.

*/5 * * * * /usr/bin/env > $HOME/cron.env
mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Да, переменных в разы меньше и другой $PATH

yukiome
() автор топика
Ответ на: комментарий от mord0d

Чтобы получить $DISPLAY, придётся сильно извернуться, даже под нужным пользователем.

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

wandrien ★★★
()
Ответ на: комментарий от yukiome

никто не рассказывает

Об этом написано в документации crontab(5).

Хотел скопипастить абзац из мана, но у нас они будут разные. Во-первых у меня не Linux, а во-вторых Debian тоже патчит крон.

mord0d ★★★★★
()
Ответ на: комментарий от wandrien

Чтобы получить $DISPLAY, придётся сильно извернуться, даже под нужным пользователем.

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

Вместо хитрых хаков ты предлагаешь топорный хак. (=

Когда понадобится запустить две графические сессии (в том числе вложенную через Xephyr), ты поймёшь почему твой способ говно был недальновидным. (=

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 2)
Ответ на: комментарий от wandrien

Критика не на ровном месте, а из личного опыта.

Сейчас объясню как сломать твой метод самым простым способом:

  • Включаем комп, заходим в графическую сессию
  • Создаётся/обновляется файл, содержащий всю информацию о графической сессии
  • Открываем Xephyr (для запуска игры, для проверки альтернативной конфигурации — не важно)
  • Файл с информацией о графической сессии снова изменяется
  • Используя этот файл, стучимся в графическую сессию, оно летит в Xephyr
  • Завершаем Xephyr
  • Снова стучимся в графическую сессию с использованием файла, но теперь оно летит в /dev/null
mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Я не запускаю полноценные сеансы в Xephyr. Максимум что я там запускаю, просто WM с отдельным конфигом + нужные приложения.

wandrien ★★★
()
Ответ на: комментарий от mord0d

«Оно» может да, а вообще – нет.

vadim@aquila:~$ Xephyr -br -ac -noreset -screen 800x600 :1 &
[1] 926334
vadim@aquila:~$ export DISPLAY=:1
vadim@aquila:~$ openbox &
[2] 926406
vadim@aquila:~$ 
wandrien ★★★
()
Ответ на: комментарий от wandrien

зачем так мучиться?

ещё и споришь с мордодом, когда тогда проще полагать DISPLAY==:0 и вася кот!

mumpster ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.