Kann ich Cron verwenden, um wie eine Standuhr zur vollen Stunde zu läuten?

8

Ich verliere mich in Askubuntu, lese Fragen und Antworten und experimentiere mit empfohlenen Codefragmenten. Daher vermisse ich es oft, zu jeder vollen Stunde den TV-Nachrichtenkanal im Internet zu wechseln. Kein großes Problem für YouTube-Kanäle, die eine zeitliche Verschiebung ermöglichen, aber es ist ein "Show Stopper" für TV-Kanäle, die einen Flash Player verwenden.

Kann cronso konfiguriert werden, dass zu jeder vollen Stunde ein Job ausgeführt wird, bei dem ich ein Skript bereitstelle, mit dem ein Großvater wie ein Glockenspiel klingt (natürlich mit subtiler Lautstärke!)? Ein leises Glockenspiel war auch am Ende der Stunde zu hören. Ich bin sicher, dass ich geeignete Dateien .oggoder .ogaDateien im Internet finden kann und ich weiß, dass ich sie ogg123zum Abspielen verwenden kann. Ich weiß nur nicht, ob cronich es schaffen könnte. Ich weiß, dass ich ein Skript verwenden könnte, das schläft und aufwacht, um die Zeit zu testen, aber ich mag den Gedanken nicht, dass ständig etwas läuft (davon ist schon genug los, denke ich).

Wenn dies möglich ist, cronkann jemand antworten, wie es eingerichtet werden soll?

Vielen Dank.

WinEunuuchs2Unix
quelle
Ich bin nicht sehr gut in englischen Redewendungen. Anfang jeder Stunde, dh Beginn jeder Stunde?
Heemayl
1
@heemayl LOL ja. Ich komme aus einer Zeit, bevor Digitaluhren erfunden wurden, und es gab einen Minutenzeiger, der "oben" bedeutete: 00 Uhr und wenn "unten": 30 Stunden bedeutete. Hehe
WinEunuuchs2Unix
sudo apt-get install mcron - stackoverflow.com/questions/44470965/…
SDsolar
@SDsolar Dies scheint ein Ersatz zu sein, cronder den Rahmen der Frage sprengt . Zu Ihrer Information: Ich habe das Skript für die Standuhr in der Antwort unten geschrieben.
WinEunuuchs2Unix

Antworten:

7

Ja, du kannst.

Öffnen Sie Ihre cronTabelle mit crontab -eund fügen Sie hinzu:

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

Ersetzen Sie /path/to/playerund /path/to/file.oggdurch die entsprechenden Werte, die Sie möchten.

Das Obige spielt den Ton (dh führt den Befehl aus) zu jeder Stunde um 00-th (Beginn der ersten) Minute ab.

Wenn Sie den Befehl auch in der 30-ten Minute jeder Stunde ausführen möchten :

00,30 * * * * /path/to/player /path/to/file.ogg
heemayl
quelle
Bei der Eingabe crontab -ewird angezeigt, dass für mein Benutzerkonto keine Datei erstellt wurde. Es bietet an, eine mit zu erstellen nano. Ich habe dies getan und die vorgeschlagenen Befehle eingerichtet. Bei Auswahl ^W(Datei schreiben) lautet der Standarddateiname : /tmp/crontab.6QN0vo/crontab. Der Dateiname scheint sehr falsch zu sein. Können Sie Ihre Antwort zum Erstellen einer neuen crontab -eKonfigurationsdatei aktualisieren ? Beachten Sie, dass mein System bereits /tmp/IG*so eingerichtet ist, dass Dateien gelöscht werden, die älter als ein Tag sind, was gut funktioniert hat (ich kann mich nur nicht erinnern, wie ich diesen Welpen eingerichtet habe).
WinEunuuchs2Unix
@ WinEunuuchs2Unix Keine Sorge, cronöffnet diese Datei vorübergehend in /tmp, sobald Sie den Inhalt gespeichert haben, wird die Datei erstellt / ersetzt /var/spool/cron/crontabs/<username>, und das ist permanent.
Heemayl
6

heemayl hat die richtige Antwort gegeben, um cronzu jeder vollen und unteren Stunde laufen zu können. Danke noch einmal! Wie andere Benutzer jedoch festgestellt haben, cronjobkönnen Audiodateien standardmäßig nicht abgespielt werden:


Konfigurieren cronzum Abspielen von Sounds

Zum cronAbspielen von Audiodateien ist exporteine Umgebungsvariable erforderlich :

export XDG_RUNTIME_DIR="/run/user/1000"

Sobald dies in Ihrem Skript erledigt ist, werden Sounds abgespielt.

Wie aus einer anderen Antwort hervorgeht, ist Ihre Benutzer-ID möglicherweise nicht immer korrekt 1000. Um Ihre Benutzer-ID zu finden, verwenden Sie:

$ id

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

Wenn Ihre Benutzer-ID nicht 1000 ist, ändern Sie das Skript in Ihre ID.

Konfigurieren Sie crondie Ausführung zu jeder vollen und unteren Stunde

crontab -e Setup (nur letzte 5 Zeilen):

# 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

Die meisten Benutzer richten cronden nanoEditor ein. Verwenden Sie diese Steuertasten nano, um Ihre Arbeit zu speichern:

  • Fügen Sie die letzten beiden Zeilen oben und Verwendung Ctrl+ Oschreiben O ut (Speichern) , um die Datei.
  • Ein /tmp...Dateiname wird angezeigt, aber seien Sie nicht besorgt, drücken Sie einfach Enter.
  • Jetzt verwenden Ctrl+ Xauf E X den nanoEditor.

Das bottom-of-hour-chimeSkript läuft auch zu jeder vollen Stunde, aber das ist in Ordnung, da es kurz und bündig ist.

Wenn Sie das >/dev/nullam Ende der Zeilen nicht haben , cronversuchen Sie, Ihnen eine E-Mail mit der Befehlsausgabe zu senden. Wenn Sie den Mailserver nicht eingerichtet haben, wird in Ihrer /var/log/syslogDatei eine Fehlermeldung angezeigt :

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

Konfigurieren cronder Anzeige von Popup-Benachrichtigungen

Das Skript zeigt zu jeder vollen Stunde eine Popup-Benachrichtigung an. Dazu muss eine zusätzliche Variable exportiert werden:

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

Inhalt von 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%

Das export XDG_RUNTIME_DIR...ist notwendig, damit der Sound abgespielt wird. Dies liegt daran, dass es cronin einer minimalen Umgebung ausgeführt wird. Diese Zeile sollte zuerst weggelassen werden, wenn Sie einen Soundplayer eines Drittanbieters verwenden. Wenn dann kein Ton zu hören ist, setzen Sie die Leitung zurück. Dann noch wenn kein Ton, gut fröhliche Jagd!

Die beiden wichtigsten Fernsehnachrichtensendungen, die ich über das Internet sehe, haben eine geringere Lautstärke als normal, sodass der Fernseher höher als normal eingestellt ist. Folglich ogg123klingen Sounddateien beim Abspielen sehr laut. Wird pactlalso verwendet, um die Lautstärke vor dem Glockenspiel zu verringern und danach zu erhöhen.

Inhalt des Bottom-of-Hour-Glockenspiels

Dies ist fast ein Duplikat von top-of-hour-chimeund möglicherweise überflüssig, wird jedoch zu Zwecken der vollständigen Dokumentation aufgenommen.

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

Trotz Verwendung dieses Exports:

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

es hat nicht funktioniert.

Nach monatelanger Forschung fand keine Lösung.

In der Verzweiflung versuchte das folgende und es funktionierte:

Geben Sie Folgendes in contab ein

# 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

Weiter erstellen .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"

Hoffe das hilft.

ColinWa
quelle