web-dev-qa-db-fra.com

Puis-je utiliser cron pour sonner l'heure, comme une horloge grand-père?

Je me perds dans askubuntu en lisant Q & A et en expérimentant les extraits de code recommandés. Par conséquent, il me manque souvent de changer de chaîne d’informations télévisées sur Internet en tout début de journée. Ce n’est pas un gros problème pour les chaînes youtube qui permettent un décalage dans le temps, mais c’est un "arrêt final" pour les chaînes de télévision utilisant Flash Player.

cron peut-il être configuré pour exécuter un travail au début de chaque heure pour lequel je fournis un script qui sonne comme un grand-père comme un carillon d'horloge (avec un volume sonore subtil, bien sûr!)? Un petit carillon pourrait aussi sonner au bas de l'heure. Je suis sûr de pouvoir localiser les fichiers .ogg ou .oga appropriés sur le réseau et je sais que je peux utiliser ogg123 pour les lire. Je ne sais pas si cron pourrait le faire. Je sais que je pourrais utiliser un script qui dort et se réveille pour tester le temps, mais je n'aime pas l'idée de faire fonctionner quelque chose tout le temps (il y en a déjà assez qui se passe déjà, je pense).

Si cela peut être fait avec cron quelqu'un peut-il nous dire comment le configurer?

Je vous remercie.

8
WinEunuuchs2Unix

heemayl a fourni la bonne réponse pour que cron soit exécuté au début et à la fin de l'heure. Merci encore! Cependant, comme d'autres utilisateurs l'ont découvert, une cronjob ne peut pas lire les fichiers audio par défaut:


Configuration de cron pour jouer des sons

Pour que cron puisse lire les fichiers audio, il doit disposer de export une variable d'environnement:

export XDG_RUNTIME_DIR="/run/user/1000"

Une fois que cela est fait dans votre script, les sons vont jouer.

Configurez cron pour fonctionner en haut et en bas de l'heure

crontab -e configuration (5 dernières lignes uniquement):

# 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

La plupart des utilisateurs configurent cron pour utiliser l'éditeur nano. Utilisez ces touches de contrôle dans nano pour enregistrer votre travail:

  • Ajoutez les deux dernières lignes ci-dessus et utilisez Ctrl+O écrire O ut (enregistrer) le fichier.
  • Un nom de fichier /tmp... est présenté, mais ne vous inquiétez pas, appuyez simplement sur Enter.
  • Maintenant utiliser Ctrl+X to e X dans l'éditeur nano.

Le script bottom-of-hour-chime s’exécute également en haut de l’heure, mais c’est acceptable car il est court et agréable.

Si vous n'avez pas le >/dev/null à la fin des lignes, cron essaie de vous envoyer un e-mail avec le résultat de la commande. Si vous n'avez pas configuré le serveur de messagerie, un message d'erreur apparaît dans votre fichier /var/log/syslog:

Oct 02 10:00:07 Dell CRON[21259]: (CRON) info (No MTA installed, discarding output)

Configuration de cron pour afficher les notifications contextuelles

Le script affiche un message de notification contextuel au début de chaque heure. Donc, pour cela, une variable supplémentaire doit être exportée:

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";

Contenu de 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%

Le export XDG_RUNTIME_DIR... est nécessaire pour que le son soit reproduit. En effet, cron s'exécute dans un environnement minimal. Cette ligne doit d'abord être omise si vous utilisez un lecteur audio tiers. Ensuite, si aucun son ne revient, remettez la ligne en ligne. Alors toujours si pas de son, bonne chasse!

Les deux principales émissions de télévision que je regarde sur Internet ont un volume plus faible que la normale, de sorte que le téléviseur est allumé plus haut que la normale. Conséquemment, lorsque ogg123 lit des fichiers sonores, ils sonnent très fort. Donc, pactl est utilisé pour réduire le volume avant le carillon et l’augmenter ensuite.

Contenu du bas-heure-carillon

Ceci est presque une copie de top-of-hour-chime et peut-être redondant ici, mais inclus à des fins de documentation complète.

#! /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%
4
WinEunuuchs2Unix

Oui, vous pouvez.

Ouvrez votre table cron avec crontab -e et ajoutez:

00 * * * * /path/to/player /path/to/file.ogg

Remplacez /path/to/player et /path/to/file.ogg par les valeurs respectives de votre choix.

Ce qui précède jouera le son (c'est-à-dire exécutera la commande) à toutes les heures à 00- e (début de la première) minute.

Si vous voulez aussi exécuter la commande à 30- e minute de chaque heure:

00,30 * * * * /path/to/player /path/to/file.ogg
7
heemayl