Рейтинг:0

Уведомление-отправка не работает из ROOT crontab

флаг pg

Этот скрипт отлично работает в пользовательском crontab, но мне нужно запустить из ROOT crontab, но не работает:

#!/бин/ш 
# cron.sh
# Уведомляет пользователя о дате и времени
источник /home/user/.bashrc
pid=$(pgrep -u user openbox | head -n 1)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
экспортировать DBUS_SESSION_BUS_ADDRESS=$dbus
экспорт HOME=/дом/пользователь
экспорт ДИСПЛЕЙ =: 0
/usr/bin/notify-send 'название' "$(/bin/дата)"

Скрипт был найден здесь: кронтаб-скрипт

Скрипт размещен в /home/user/cron.sh со всеми разрешениями(777). Мой корневой crontab:

* * * * * /home/user/cron.sh

Если я использую этот скрипт в обычном пользовательском crontab, он работает и показывает всплывающий текст, но не из корневого crontab. системный журнал (/var/журнал/системный журнал ) не показывать ошибки при запуске crontab.

Artur Meinild avatar
флаг vn
Уточните, пожалуйста, ряд моментов: 1) Что не работает, скрипт вообще не запускается? 2) Каково расположение и права доступа к файлу сценария. 3) Какая строка crontab используется для запуска скрипта. В общем, предоставьте как можно больше информации, иначе действительно трудно помочь.
Artur Meinild avatar
флаг vn
Может ли быть так, что при запуске от root уведомление получает пользователь root, а не другой пользователь? Вы можете добавить эту строку, чтобы убедиться, что скрипт действительно работает: `touch /home/user/script-has-run`. Если файл `/home/user/script-has-run` существует, значит, сценарий выполнен.
флаг hr
AFAIK `source` - это ерунда - в POSIX /bin/sh вы должны использовать `. /home/user/.bashrc`, но на самом деле вам не следует размещать `.bashrc` в оболочке `sh` - если вам нужны функции из пользовательского `.bashrc`, переключите shebang на `#!/bin/ удар`
Рейтинг:1
флаг vn

я уверен уведомление-отправить необходимо запустить от имени пользователя, который должен получать уведомление. Попробуйте заменить последнюю строку на эту:

su user -c '/usr/bin/notify-send "название" "$(/bin/date)"'

su пользователь -c команда переключает пользователя на пользователь и передает следующую команду в оболочку.

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

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

флаг hr
Я не думаю, что `su` передает завершающие аргументы команде `-c`, не так ли? Возможно, это должно быть `su user -c '/usr/bin/notify-send "title" "$(/bin/date)"'`. В любом случае, если вы собираетесь запускать `notify-send` от имени `user`, то, безусловно, имеет смысл запускать все это из crontab `user`...
Artur Meinild avatar
флаг vn
Я считаю, что вы правы. Тем не менее, я также действительно не могу понять вариант использования OP, но попытался помочь из того, что я мог найти в другом месте.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.