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"

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

★★★★
Ответ на: комментарий от firkax

Лежит в корне. На самом деле я пропиcал там полный путь к файлу birthday.sh.

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

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

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

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

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

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

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

Спасибо, сейчас попробую. Но мне кажется что ./ не нужно (?).

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

Программа работает в интерактивном режиме или просто даёт вывод и закрывается? Возможно, 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
()
Ответ на: комментарий от afanasiy

Не, не работает. Надо же вначале запустить терминал, запустить в нем команды и затем вывести его на экран.

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

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

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

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

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

hobbit ★★★★★
()

Если терминалом пользуетесь постоянно, то можно скрипт добавить в ~/.bashrc, чтобы при запуске выводились ближайшие даты.

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

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

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

Это я знаю, но пользуюсь не так часто.

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

Я через QT Creator проект открываю, и компилю, но @hobbit вроде делал и из командной строки.

tiinn ★★★★★
()
Ответ на: комментарий от 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 ★★★★
() автор топика

/usr/bin/xterm /birthday.sh

Консольные программы нужно запускать в эмуляторе терминала, сами они эмулятор терминала не запустят.

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

я наоборот с годами перестал на ДР внимание обращать. к тому же сейчас все социальные сети и мессенджеры с такой напоминалкой.

wonit
()

Я такие вещи в Google Calendar пишу. Там и оповещалка на десктопе/телефоне/часах работает, и вообще удобная вещь.

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

Наверное так. Отстал немного от этих новшеств. Но хочется хоть какой нибудь независимости от гугля.

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

Работает, спасибо. Проблема решена.

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