Posso usare cron per suonare l'ora superiore come un orologio a pendolo?


8

Mi perdo in askubuntu leggendo domande e risposte e sperimentando frammenti di codice consigliati. Quindi mi manca spesso cambiare canale di notizie TV su Internet nella parte superiore dell'ora. Non è un grosso problema per i canali di YouTube che consentono il time-shifting, ma è un "fermo programma" per i canali TV che usano il flash player.

Può cronessere configurato per eseguire un lavoro all'inizio di ogni ora in cui fornisco uno script per suonare un nonno come il carillon (con un volume del suono sottile ovviamente!)? Si potrebbe anche suonare un suono minore in fondo all'ora. Sono sicuro di poter trovare file .oggo .ogafile adatti in rete e so che posso usarli ogg123per riprodurli. Solo non so se cronpotrei farlo. So che potrei usare uno script che dorme e si sveglia per testare il tempo ma non mi piace il pensiero di avere qualcosa in esecuzione tutto il tempo (penso che ci sia già abbastanza di quello che succede).

Se è possibile farlo, cronqualcuno può rispondere a come configurarlo?

Grazie.


Non sono molto bravo con gli idiomi inglesi. all'inizio di ogni ora che significa all'inizio di ogni ora?
Hememl

1
@heemayl LOL sì. Vengo da un tempo prima che fossero inventati gli orologi digitali e c'era una lancetta dei minuti che quando in "alto" significava: 00 di ora e quando in "basso" significava: 30 di ora. Hehe
WinEunuuchs2Unix

sudo apt-get install mcron - stackoverflow.com/questions/44470965/...
SDsolar


@SDsolar questo sembra essere un sostituto per il cronquale va oltre lo scopo della domanda. Cordiali saluti, ho scritto la sceneggiatura dell'orologio del nonno nella risposta di seguito.
WinEunuuchs2Unix

Risposte:


7

Si, puoi.

Apri il tuo crontavolo con crontab -ee aggiungi:

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

Sostituisci /path/to/playere /path/to/file.oggcon i rispettivi valori desiderati.

Quanto sopra riprodurrà il suono (ovvero eseguirà il comando), ad ogni ora al 00-th (inizio del primo) minuto.

Se vuoi eseguire anche il comando al 30-th minute di ogni ora:

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

Durante la digitazione crontab -edice che non è stato creato alcun file per il mio account utente. Offre di crearne uno con nano. L'ho fatto e impostato i comandi suggeriti. Quando si seleziona ^W(file scrittura) il nome del file predefinito è: /tmp/crontab.6QN0vo/crontab. Il nome del file sembra molto sbagliato. Puoi aggiornare la tua risposta per creare un nuovo crontab -efile di configurazione? Nota che il mio sistema è già configurato per eliminare i /tmp/IG*file nel corso di un giorno che ha funzionato bene (non ricordo come ho impostato quel cucciolo).
WinEunuuchs2Unix

@ WinEunuuchs2Unix Non ti preoccupare, cronapre temporaneamente il file /tmp, una volta salvato il contenuto, creerà / sostituirà il file /var/spool/cron/crontabs/<username>e questo è permanente.
heemayl

6

heemayl ha fornito la risposta corretta per iniziare crona correre all'inizio e alla fine dell'ora. Grazie ancora! Tuttavia, poiché altri utenti hanno scoperto che cronjobnon è possibile riprodurre file audio per impostazione predefinita:


Configurazione cronper riprodurre suoni

Per cronpoter riprodurre file audio è necessario disporre di exportuna variabile di ambiente:

export XDG_RUNTIME_DIR="/run/user/1000"

Una volta fatto ciò nella tua sceneggiatura verranno riprodotti i suoni.

Come sottolineato da un'altra risposta, il tuo ID utente potrebbe non essere sempre 1000. Per trovare il tuo ID utente usa:

$ id

uid=1000(rick) gid=1000(rick) groups=1000(rick),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)

Se il tuo ID utente non è 1000, cambia lo script nel tuo ID.

Configurare cronper eseguire la parte superiore dell'ora e la parte inferiore dell'ora

crontab -e impostazione (solo ultime 5 righe):

# 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 maggior parte degli utenti si installa cronper usare l' nanoeditor. Usa questi tasti di controllo nanoper salvare il tuo lavoro:

  • Aggiungi le ultime due righe sopra e usa Ctrl+ Oper scrivere O ut (salva) il file.
  • Viene /tmp...presentato un nome file, ma non preoccuparti, premi semplicemente Enter.
  • Ora usa Ctrl+ Xper farlo X l' nanoeditor.

Lo bottom-of-hour-chimescript funziona anche all'inizio dell'ora ma, va bene dato che è breve e dolce.

Se non hai la >/dev/nullfine delle righe cronprova a inviarti un'e-mail con l'output del comando. Se non hai configurato il server di posta, nel tuo /var/log/syslogfile appare un messaggio di errore :

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

Configurazione cronper visualizzare le notifiche popup

Lo script visualizza un messaggio di notifica a comparsa nella parte superiore di ogni ora. Quindi per questo è necessario esportare una variabile aggiuntiva:

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

Contenuti di 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%

Il export XDG_RUNTIME_DIR...è necessario per ottenere il suono di gioco. Questo perché cronfunziona in un ambiente minimo. Questa riga deve essere omessa per prima se si utilizza un lettore audio di terze parti. Quindi se nessun suono ripristina la linea. Quindi ancora se nessun suono, ben felice caccia!

I due principali programmi TV che guardo in rete hanno un volume più basso del normale, quindi ho la TV alzata più del normale. Di conseguenza, quando ogg123riproducono file audio, suonano molto forte. Quindi pactlviene utilizzato per ridurre il volume prima del segnale acustico e aumentarlo successivamente.

Contenuto del carillon di fine ora

Questo è quasi un duplicato top-of-hour-chimee forse ridondante qui, ma incluso per scopi di documentazione completa.

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

1

Pur usando questa esportazione:

# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"

non ha funzionato.

Dopo mesi di ricerca non ha trovato soluzione.

Nella disperazione, ho provato quanto segue e ha funzionato:

Immettere quanto segue in 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

Quindi creare .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"

Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.