Проигрывание музыки по расписанию (crontab, ffplay)

Сообщения
6
#1
Здравствуйте! Стоит задача следующего характера. Вне зависимости от того, чем занят компьютер под управлением ОССН ALSE 1.7 (простаивает или работает за ним пользователь), каждый час должен звучать звуковой файл, желательно, при этом не мешая работе пользователя.

Решил это так:

Добавил в
sudo crontab -e
следующее задание:
0 * * * * /share/music.sh

Файл music.sh при этом:
Bash:
#!/bin/bash
ffplay /share/music.mp3 -nodisp
Задание по расписанию срабатывает, музыка играет.

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

В чем может быть дело?
 

oko

New member
Сообщения
1 222
#2
У вас root (ибо по умолчанию crontab -e от него исполняет расписание) монопольно захватил управление аудио устройством. Отсюда и блокировка...
А захватил и не отпускает, потому что вы не добавили флаг -autoexit к ffplay. И в вашем случае bash-скрипт вообще излишне - проще прямую команду со всеми аргументами в crontab прописать. Но в конце любого bash/sh/иное скрипта хорошо бы делать exit 0 во избежание, ага...
Вообще, практика запускать такие вещи от root весьма порочна. Лучше поэкспериментируйте с какой-нибудь специально созданной уч.записью, у которой прав доступа кроме как к ffplay и нужному аудиофайлу больше нет. Впрочем, тут может возникнуть проблема прав доступа к аудиоустройству и т.д. - надо пробовать...
 
Сообщения
6
#3
У вас root (ибо по умолчанию crontab -e от него исполняет расписание) монопольно захватил управление аудио устройством. Отсюда и блокировка...
Действительно, -autoexit помогло. Не знал, что ffplay сам не закрывается после окончания воспроизведения... Когда экспериментировал с ручным вызовом, ни разу не дослушал до конца :D

Почему система блокирует аудиоустройство на того пользователя, который его "занял"? Ведь под одним то пользователем работает микшер и все звуки смешиваются, почему такое поведение невозможно при работе разных пользователей? Или это отдельно настраивается?

Кстати, сейчас обратил внимание, что при срабатывании задания cron при работе пользователя (когда он залогинен), блокировки аудиоустройства не происходит, пользователь может регулировать громкость и т.д.. Если же cron сработал при отсутствии активных сессий пользователей, то при входе во время воспроизведения пользователь увидит, что как-будто в системе нет аудиоустройств, а при окончании воспроизведения (при условии флага autoexit) - аудиоустройство у него "появляется" в системе, как-будто вновь подключенное.

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

oko

New member
Сообщения
1 222
#4
to artem.sorokin
Не готов утверждать однозначно, но есть мнение, что ffplay - низкоуровневая утилита, которая монополизирует ресурс в период своей работы. Тем более при ее запуске с привилегиями root. Что же до cron-запуска в период действующей сесси пользователя - весьма вероятно, что ALSA-подсистема сама корректирует такое поведение ffplay. Это всего лишь догадки, надо курить маны на эту тему...
По поводу блокировки: вы же проверили, при отсутствии логина пользователя аудиодорожка "проходит". Значит, должна "проходить" и при блокировке текущего сеанса...
Вы бы задачу более-менее детально описали. Возможно, есть куда более элегантное решение...
 
Сообщения
6
#6
Задача такова, что есть компьютер, за которым работают всякие-разные пользователи. На этот же компьютер надо возложить задачу каждый час проигрывать аудиофайл (а-ля часы с кукушкой). Кажется, что наиболее элегантный вариант для этого - cron.
Но вот заставить сие нормально работать, не мешая работе людей за компьютером, т.е. в фоне - пока не получается...