Могу ли я использовать cron, чтобы звонить на вершине часа, как напольные часы?
Я заблудился в Askubuntu, читая вопросы и ответы и экспериментируя с рекомендуемыми фрагментами кода. Поэтому я часто пропускаю переключение телевизионных новостных каналов в Интернете в самый разгар рабочего дня. Не большая проблема для каналов YouTube, которые позволяют сдвигать время, но это "шоу-стопер" для телеканалов, использующих Flash Player.
Можно cron быть настроенным на выполнение задания в начале каждого часа, где я предоставляю сценарий для звучания деда, как звуки часов (конечно, с тонким звуком!)? Незначительный перезвон мог звучать в нижней части часа тоже. Я уверен, что могу найти подходящий .ogg или же .oga файлы в сети, и я знаю, что могу использовать ogg123 играть в них. Я просто не знаю, если cron мог бы сделать это. Я знаю, что мог бы использовать сценарий, который спит и просыпается, чтобы проверить время, но мне не нравится мысль о том, чтобы что-то работало постоянно (этого уже достаточно, я думаю).
Если это можно сделать с cron может кто-нибудь ответить, как его настроить?
Спасибо.
2 ответа
heemayl предоставил правильный ответ, чтобы получить cron бежать в верхней части часа и нижней части часа. Еще раз спасибо! Однако, как другие пользователи обнаружили cronjob не может воспроизводить звуковые файлы по умолчанию:
- Как заставить говорящие часы (через cron и Festival TTS) работать во время воспроизведения музыки
- Помогите с помощью crontab воспроизвести звук
Настройка cron играть звуки
Для того чтобы cron для воспроизведения звуковых файлов необходимо export переменная окружения:
export XDG_RUNTIME_DIR="/run/user/1000"
Как только это будет сделано, в вашем скрипте будут звучать звуки.
конфигурировать cron бегать по верхней и нижней части часа
crontab -e настройка (только последние 5 строк):
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
00 * * * * /usr/local/bin/top-of-hour-chime >/dev/null
00,30 * * * * /usr/local/bin/bottom-of-hour-chime >/dev/null
Настройка большинства пользователей cron использовать nano редактор. Используйте эти клавиши управления в nano чтобы сохранить свою работу:
- Добавьте последние две строки выше и используйте Ctrl+O, чтобы написать O ut (сохранить) файл.
/tmp...имя файла представлено, но не беспокойтесь, просто нажмите Enter.- Теперь используйте Ctrl+X, чтобы еX это
nanoредактор.
bottom-of-hour-chime Сценарий запускается в самом начале часа, но это нормально, потому что он короткий и приятный.
Если у вас нет >/dev/null в конце строк cron пытается отправить вам сообщение с выводом команды. Если у вас не настроен почтовый сервер, в вашем /var/log/syslog файл:
Oct 02 10:00:07 dell CRON[21259]: (CRON) info (No MTA installed, discarding output)
Настройка cron отображать всплывающие уведомления
Сценарий отображает всплывающее уведомление в верхней части каждого часа. Поэтому для этого необходимо экспортировать дополнительную переменную:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
Содержание top-of-hour-chime
#! /bin/bash
# NAME: top-of-hour-chime
# PATH: /usr/local/bin
# DESC: Play sound called by cron
# CALL: Automatically called by /var/spool/cron/crontabs/<user_name>
# DATE: Created Oct 1, 2016. Modified June 10, 2018.
# UPDT: 2016-11-09 - Add notification bubble with time in text.
# 2018-06-10 - Switch from `ogg123` to `paplay` in default installation.
# exit # uncomment to suppress when watching movies
# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"
# needed for notify-send
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
# get hour in 12 hour format
HOUR=$(date +%I)
ZHOUR=$(echo $HOUR | sed 's/^0*//')
pactl set-sink-volume 0 -25%
DISPLAY=:0 notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "It is ""$ZHOUR"" o'clock"
paplay '/usr/share/sounds/ubuntu/ringtones/Melody piano.ogg'
pactl set-sink-volume 0 +25%
export XDG_RUNTIME_DIR... необходимо получить звук, чтобы играть. Это потому что cron работает в минимальной среде. Эта строка должна быть пропущена первой, если вы используете сторонний звуковой проигрыватель. Затем, если нет звука, верните линию. Тогда все равно, если нет звука, ну счастливой охоты!
Два главных телевизионных новостных шоу, которые я смотрю по сети, имеют более мягкую громкость, чем обычно, поэтому у меня телевизор включен выше обычного. Следовательно, когда ogg123 воспроизводит звуковые файлы, они звучат очень громко. Так pactl используется, чтобы уменьшить громкость до звонка и увеличить его после.
Содержимое нижней части часа
Это почти дубликат top-of-hour-chime и, возможно, здесь избыточно, но включено для полной документации.
#! /bin/bash
# NAME: bottom-of-hour-chime
# PATH: /usr/local/bin
# DESC: Play sound called by cron
# CALL: Automatically called by /var/spool/cron/crontabs/<user_name>
# DATE: Oct 1, 2016. Modified June 10, 2018.
# UPDT: 2018-06-10 Switch from `ogg123` to `paplay` installed by default.
# exit # Uncomment to suppress when watching movies.
# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"
pactl set-sink-volume 0 -25%
paplay /usr/share/sounds/ubuntu/ringtones/Bliss.ogg
pactl set-sink-volume 0 +25%
Да, ты можешь.
Открыть свой cron стол с crontab -e, и добавить:
00 * * * * /path/to/player /path/to/file.ogg
замещать /path/to/player, а также /path/to/file.ogg с соответствующими значениями, которые вы хотите.
Выше будет воспроизводить звук (т.е. запустить команду), каждый час в 00-я (начало первой) минуты.
Если вы хотите запустить команду в 30минута каждого часа тоже:
00,30 * * * * /path/to/player /path/to/file.ogg
Несмотря на использование этого экспорта:
# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"
это не сработало.
После нескольких месяцев исследований не нашли решения.
В отчаянии попробовал следующее и все заработало:
Введите следующее в contab
# Terminal command: crontab -e
# Detect the name of the display in use
display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
user=$(who | grep '('$display')' | awk '{print $1}') # the user of the display
uid=$(id -u $user) #Detect the id of the user
XDG_RUNTIME_DIR=/run/user/${uid}
*/5 * * * * sh /root/.play_sound.sh
Следующее создание .play_sound.sh
/root/.play_sound.sh
display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
user=$(who | grep '('$display')' | awk '{print $1}') # the user of the display
uid=$(id -u $user) #Detect the id of the user
su - $user -c "paplay /usr/share/sounds/freedesktop/stereo/complete.oga"
Надеюсь это поможет.