Bisakah saya menggunakan cron untuk berpadu di atas jam seperti jam kakek?

8

Saya tersesat dalam askubuntu membaca Tanya Jawab dan bereksperimen dengan cuplikan kode yang disarankan. Jadi saya sering kehilangan saluran TV berita di internet pada jam paling atas. Bukan masalah besar untuk saluran youtube yang memungkinkan pengubahan waktu, tetapi ini adalah "show stopper" untuk saluran tv menggunakan flash player.

Dapat crondikonfigurasi untuk menjalankan pekerjaan di bagian atas setiap jam di mana saya menyediakan skrip untuk terdengar seperti kakek seperti jam berpadu (dengan volume suara yang halus tentu saja!)? Lonceng kecil bisa terdengar di bagian bawah jam juga. Saya yakin saya dapat menemukan file yang sesuai .oggatau .ogadi internet dan saya tahu saya dapat menggunakannya ogg123untuk memainkannya. Saya hanya tidak tahu apakah cronbisa melakukannya. Saya tahu saya bisa menggunakan skrip yang tidur dan bangun untuk menguji waktu tetapi tidak suka membayangkan memiliki sesuatu yang berjalan sepanjang waktu (saya rasa sudah cukup banyak yang terjadi).

Jika ini dapat dilakukan dengan cronseseorang dapat menjawab bagaimana mengaturnya?

Terima kasih.

WinEunuuchs2Unix
sumber
Saya tidak pandai idiom bahasa Inggris. atas setiap jam, artinya mulai setiap jam?
heemayl
1
@ heemayl LOL ya. Saya datang dari waktu sebelum jam digital ditemukan dan ada satu menit tangan yang ketika di "atas" berarti: 00 jam dan ketika di "bawah" berarti: 30 jam. Hehe
WinEunuuchs2Unix
sudo apt-get install mcron - stackoverflow.com/questions/44470965/…
SDsolar
@ SDolar ini tampaknya menjadi pengganti cronyang berada di luar cakupan pertanyaan. FYI Saya sudah menulis skrip jam kakek dalam jawaban di bawah ini.
WinEunuuchs2Unix

Jawaban:

7

Ya kamu bisa.

Buka cronmeja Anda dengan crontab -e, dan tambahkan:

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

Ganti /path/to/player, dan /path/to/file.oggdengan nilai masing-masing yang Anda inginkan.

Di atas akan memainkan suara (yaitu menjalankan perintah), pada setiap jam pada menit ke- 00(awal pertama).

Jika Anda ingin menjalankan perintah pada 30menit ke-1 setiap jam juga:

00,30 * * * * /path/to/player /path/to/file.ogg
heemayl
sumber
Saat mengetik crontab -edikatakan tidak ada file yang dibuat untuk akun pengguna saya. Ia menawarkan untuk membuat satu dengan nano. Saya melakukan ini dan mengatur perintah yang disarankan. Ketika memilih ^W(write file) nama file default adalah: /tmp/crontab.6QN0vo/crontab. Nama file sepertinya sangat salah. Bisakah Anda memperbarui jawaban untuk membuat crontab -efile konfigurasi baru ? Catatan sistem saya sudah diatur untuk menghapus /tmp/IG*file lebih dari satu hari yang telah berfungsi dengan baik (saya hanya tidak ingat bagaimana saya mengatur anak anjing itu).
WinEunuuchs2Unix
@ WinEunuuchs2Unix Jangan khawatir, cronbuka file itu sementara /tmp, setelah Anda menyimpan konten, akan membuat / mengganti file /var/spool/cron/crontabs/<username>, dan itu permanen.
heemayl
6

heemayl telah memberikan jawaban yang benar untuk bisa cronberlari di bagian atas jam dan bagian bawah jam. Terima kasih lagi! Namun karena pengguna lain telah menemukan, cronjobtidak dapat memutar file suara secara default:


Mengkonfigurasi cronuntuk memutar suara

Untuk cronmemutar file suara, perlu exportvariabel lingkungan:

export XDG_RUNTIME_DIR="/run/user/1000"

Setelah ini selesai dalam skrip Anda, suara akan diputar.

Seperti yang ditunjukkan oleh jawaban lain, ID pengguna Anda mungkin tidak selalu 1000. Untuk menemukan ID pengguna Anda gunakan:

$ id

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

Jika ID pengguna Anda bukan 1000, maka ubah skrip ke ID Anda.

Konfigurasikan cronuntuk menjalankan top of hour dan bottom of hour

crontab -e pengaturan (hanya 5 baris terakhir):

# 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

Sebagian besar pengguna mengatur cronuntuk menggunakan nanoeditor. Gunakan kunci kontrol ini nanountuk menyimpan pekerjaan Anda:

  • Tambahkan dua baris terakhir di atas dan gunakan Ctrl+ Ountuk menulis O ut (simpan) file.
  • Sebuah /tmp...nama file disajikan, tetapi jangan khawatir, cukup tekan Enter.
  • Sekarang gunakan Ctrl+ Xuntuk e X itu nanoeditor.

The bottom-of-hour-chimeScript berjalan di atas jam juga, tapi, itu OK karena itu pendek dan manis.

Jika Anda tidak memiliki >/dev/nullpada akhir baris cronmencoba untuk mengirim email kepada Anda dengan output perintah. Jika Anda tidak memiliki pengaturan server mail, pesan kesalahan muncul di /var/log/syslogfile Anda :

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

Mengonfigurasi cronuntuk menampilkan pemberitahuan munculan

Skrip menampilkan pesan pemberitahuan sembulan di bagian atas setiap jam. Jadi untuk ini, variabel tambahan perlu diekspor:

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

Isi dari 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%

The export XDG_RUNTIME_DIR...diperlukan untuk mendapatkan suara untuk bermain. Ini karena cronberjalan di lingkungan minimal. Baris ini harus dihilangkan terlebih dahulu jika Anda menggunakan pemutar suara pihak ketiga. Maka jika tidak ada suara, kembalikan garis itu. Maka tetap saja jika tidak ada suara, selamat berburu juga!

Dua berita utama TV menunjukkan bahwa saya menonton di internet memiliki volume yang lebih lembut dari biasanya sehingga TV saya naik lebih tinggi dari biasanya. Akibatnya saat ogg123memutar file suara mereka terdengar sangat keras. Jadi pactldigunakan untuk mengurangi volume sebelum berpadu dan meningkatkannya setelah itu.

Isi dari bottom-of-jam-berpadu

Ini hampir merupakan duplikat top-of-hour-chimedan mungkin berlebihan di sini, tetapi termasuk untuk tujuan dokumentasi lengkap.

#! /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
sumber
1

Meskipun menggunakan ekspor ini:

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

tidak berhasil.

Setelah berbulan-bulan penelitian tidak menemukan solusi.

Dalam keputusasaan, cobalah yang berikut ini dan berhasil:

Masukkan yang berikut di 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

Selanjutnya buat .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"

Semoga ini membantu.

ColinWa
sumber