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

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

 , ,


0

1

На данный момент у меня 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

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

Для использования 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
() автор топика
Ответ на: комментарий от yukiome

Я б добавил прям туда чо-то типа:

if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
    export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
fi
wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от mord0d

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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