paplay не работает из cron

Чуть больше года назад я написал приложение-уведомитель. (в Ubuntu 16.04.7), который воспроизводил звук с помощью paplay, а затем выводил окно yad с текстом уведомления. Это может быть запущено либо из командной строки, либо из cron. Недавно я установил Ubuntu 20.04.3 и обнаружил, что запуск из командной строки все еще работает, а запуск из cron - нет. У меня есть каталог bin под моим домашним каталогом, где хранится сценарий (remind.sh). Урезанная версия remind.sh выглядит следующим образом. Обратите внимание, что когда я запускаю cron, я не получаю звуковой индикации, что скрипт запущен, но файл trace.txt обновляется, и yad создает окно.

#!/bin/bash
# reminder script called from either
#           1. cron or
#           2. directly from shell to pop-up or
#           3. gidday.sh
# produces a 'yad' window with a picture and message in it.

/usr/bin/paplay /home/gary/sounds/marimba.ogg

# trace the run
d=`date`
echo "done -- "$d >> trace.txt

# now put out the window
#
#/usr/bin/yad --borders=50 --scroll --image=/home/gary/Pictures/shrunk-pictures/${ar[$t]} --title="${ar[$t]}" --text-align=center --mouse --width=800 --height=400 --text='<span font="20">'"$txt"'</span>' 2>/dev/null

Извините, я должен был указать следующее в своем исходном сообщении. Строка в crontab, запускающая скрипт remind1.sh, следующая:

36 13 30 aug * export DISPLAY=:0 && export MESSG="get movies from lib" && /home/gary/bin/remind1.sh

Как я уже сказал, все это отлично работало в Ubuntu 16.04. И это все еще не объясняет, почему команда paplay не запускается, а команда yad (без комментариев) работает.

0
задан 1 September 2021 в 11:12

1 ответ

Задания выполняются через cron или systemd сценарии запуска не запускаются в той же среде выполнения, что и на вашем рабочем столе. Сценарии запуска systemd запускаются от имени root . Ни одно из изменений вашего PATH или других настроек переменных среды из вашего ~ / .bashrc не распространяется автоматически на ваше задание cron . Например, нет $ DISPLAY , поэтому программы с графическим интерфейсом требуют особого обращения (прочтите man xhost ).

Можно установить переменные среды для всех своих cron заданий в файле crontab Прочитать man 5 crontab .

Посмотрите на результаты echo "=== id ==="; id; echo "=== set ==="; set; echo "=== env ==="; env | sort; echo "=== alias ==="; alias в каждой из ваших сред.

Поскольку команда в строке crontab по умолчанию интерпретируется файлом / bin / sh , который имеет более простой синтаксис, чем / bin / bash , я рекомендую, чтобы команда вызывала сценарий bash (исполняемый, смонтированный, начинается с #! / bin / bash ), который настраивает среду, а затем вызывает нужную программу.

1
ответ дан 4 September 2021 в 09:27

Другие вопросы по тегам:

Похожие вопросы: