LINUX.ORG.RU

cron + birthday?

 ,


0

2

День добрый. Пользавался много лет gbirthday программкой, очень удобная штука, но проект помер и заменился qbirthday, который собирается на питоне. Сегодня поставил новый Linux Mint 22 (ubuntu 24). qbirthday собирается в отдельном ящике, но не работает, к сожалению. Нашел простую консольную прогу birthday. Сделал базу данных, запускаю в консоли birthday -L, дает бижайшие др по умолчанию на 21 день вперед. Удобно. Но я естественно забуду запускать в консоли эту прогу. Хотел заставить cron это делать, чтобы выводил пару раз в день терминал, где находится вывод birthday -L. Сделал исполняемя bash birthday.sh

#!/bin/bash
birthday -L

Сделал запуск этого скрипта по расписанию

0 10,20 * * * ~birthday.sh

Но ничего не происходит. Пробовал разные комбинации, типа

mate-terminal -e "~birthday.sh"

Бестолку. Подскажите, кто знает какой синтаксис дб. Надо же просто запустить терминал, и в нем запустит команду. Но не догоняю, как сделать.

★★★★

Команды cron запускаются системным шеллом (т.е. /bin/sh) и без переменных окружения. Соответственно, никакие раскрытия работать не будут, никакие ~birthday, никакие mate-terminal.

Только полные пути, только хардкор.

В принципе, в crontab можно указать SHELL=/bin/моя-любимая-оболочка, но она всё равно будет в неинтерактивном режиме.

Aceler ★★★★★
()

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

Ну и как уже указали выше, если запускаете именно через cron, то нужно вручную прописать все необходимые переменные окружения в самом скрипте.

spal
()
Последнее исправление: spal (всего исправлений: 1)
Ответ на: комментарий от spal

Терминал мгновенно закрывается. Я указывал везде полные пути, просто решил сократить первоначальный пост. Сначала я попробую вариант @afanasiy потом ваш. Спасибо.

rustamych ★★★★
() автор топика
Последнее исправление: rustamych (всего исправлений: 1)

не забывай про переменные DISPLAY & XAUTHORITY. у меня так оповещение о разряде батареи работало, по памяти что-то типа:

exec snooze -H* -M2 acpi --battery |
        awk -F, '/Discharging/ { if (int($2) < 20) print }' |
        xargs -ri env DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority notify-send ...

snooze – тоже что cron

anonymous
()
Ответ на: комментарий от wonit
#!/bin/bash
unset name

case `date +%j` in
1)
name='Иванова'
;;
323)
name='Петрова'
;;
365)
name='Сидорова'
esac

test $name && notify-send "Сегодня день рождения у $name" --icon=dialog-information --expire-time=86399999

Затем его в systemd или в cron каждый день запускать. На ближайшие три года хватит скрипта, а за это время пофиксишь на високосный год проверку с коррекцией номера дня.

wonit
()

Консольность принципиально важна?

Если нет, то среди GUI-шных имеется https://github.com/KloinTiinn/TheirBirthday от @tiinn, например. Qt, C++ и никакого питона. Также выводит зДаБеДательные даты на определённый интервал вперёд.

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

Нет конечно, консольность вообще не важна. Просто я не смог найти какой нить достойной замены gbirthday/qbirthday и решился организовать вот так через cron. Эти были оч удобны, висели в трее и в нужный момент краснели, а при щелкании на иконку выдавали ближайшие др вперед и назад во времени. Спасибо за ссылку посмотрю вечером, что за зверь. Вы сами пользовались?

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

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

Там вообще занятная история с этой программой, человек спрашивал, как запустить виндовую уведомлялку в wine и некоторое время упорно не хотел слышать про аналоги, поскольку ни один аналог не подошёл. Но тут случилось чудо, в тему пришёл автор именно того аналога, который искал ТC, и всё заверте…

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

:) создатель, как я понимаю. А как там компилить, не пойму? Я не программист, только любитель. Нет файла конфигурации, который обычно есть при сборке.

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

Зачем столько кода в такой мелочи? Этому скрипту можно за полчаса дописать диалог добавления виновников проблемы. И вообще не понимаю такое:

висели в трее и в нужный момент краснели

Зачем оно нужно, глаза мозолить?

Короче, не понимаю я, зачем жизнь усложнять? Или для кого-то код ради кода цель жизни.

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

«И вообще не понимаю такое». Ну тогда и не надо понимать. Мне это удобно, давно пямять не та. Глаза ни капли не мозолит, повторюсь, лично мне. К 62 годам набирается много др, которые не упомнить. Часть уходят естественным путем.

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

@afanasiy Да, точно. Вспомнил свой старый скрипт с таким же способом. В итоге вот такая конструкция заработала

#!/bin/bash
export DISPLAY=:0
/usr/bin/mate-terminal -e "bash -c /usr/bin/birthday;bash" 
echo Press enter to continue; read; 

Один вопрос остался. Как передать birthday ключь -L ? Пробовал так «/usr/bin/birthday -L», не работает.

rustamych ★★★★
() автор топика