ฉันสามารถใช้ cron เพื่อตีระฆังที่ด้านบนของชั่วโมงเหมือนนาฬิกาคุณปู่ได้หรือไม่?


8

ฉันหลงทางใน Askubuntu การอ่านคำถามและการทดสอบกับข้อมูลโค้ดที่แนะนำ ดังนั้นฉันมักจะพลาดการเปลี่ยนช่องข่าวทีวีบนอินเทอร์เน็ตที่ด้านบนของชั่วโมง ไม่ใช่ปัญหาใหญ่สำหรับช่อง YouTube ที่อนุญาตให้เปลี่ยนเวลา แต่เป็น "show stopper" สำหรับช่องทีวีที่ใช้ flash player

สามารถcronกำหนดค่าให้ทำงานที่ด้านบนของแต่ละชั่วโมงที่ฉันให้สคริปต์เพื่อฟังเสียงคุณปู่เช่นเสียงนาฬิกาปลุก (มีระดับเสียงที่แน่นอน!) เสียงระฆังเล็กน้อยสามารถฟังที่ด้านล่างของชั่วโมงด้วย ฉันแน่ใจว่าฉันสามารถค้นหาที่เหมาะสม.oggหรือ.ogaไฟล์บนเน็ตและฉันรู้ว่าฉันสามารถใช้ogg123ในการเล่นพวกเขา ฉันแค่ไม่รู้ว่าcronสามารถทำได้หรือไม่ ฉันรู้ว่าฉันสามารถใช้สคริปต์ที่หลับและตื่นขึ้นมาเพื่อทดสอบเวลา แต่ไม่ชอบความคิดที่จะมีบางสิ่งบางอย่างทำงานอยู่ตลอดเวลา

หากสามารถทำได้ด้วยcronใครสามารถตอบวิธีการตั้งค่า?

ขอบคุณ.


ฉันไม่ค่อยเก่งในสำนวนภาษาอังกฤษ ด้านบนของแต่ละชั่วโมงหมายถึงการเริ่มต้นของแต่ละชั่วโมง?
heemayl

1
@ heemayl ฮ่า ๆ ใช่ ฉันมาจากช่วงเวลาก่อนที่นาฬิกาดิจิตอลจะถูกประดิษฐ์ขึ้นและมีเข็มนาทีว่าเมื่อที่ "top" หมายถึง: 00 ชั่วโมงและเมื่อที่ "bottom" หมายถึง: 30 ชั่วโมง Hehe
WinEunuuchs2Unix

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


@SDsolar สิ่งนี้ดูเหมือนจะเป็นการทดแทนcronซึ่งอยู่นอกเหนือขอบเขตของคำถาม FYI ฉันได้เขียนสคริปต์นาฬิกาของคุณปู่ในคำตอบด้านล่าง
WinEunuuchs2Unix

คำตอบ:


7

ใช่คุณสามารถ.

เปิดcronตารางของคุณด้วยcrontab -eและเพิ่ม:

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

แทนที่/path/to/playerและ/path/to/file.oggด้วยค่าที่คุณต้องการ

ด้านบนจะเล่นเสียง (เช่นเรียกใช้คำสั่ง) ทุก ๆ ชั่วโมงที่00-th (เริ่มต้นก่อน)

หากคุณต้องการรันคำสั่งใน30นาทีที่-th ของแต่ละชั่วโมงด้วย:

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

เมื่อพิมพ์crontab -eจะแจ้งว่าไม่มีไฟล์ที่สร้างขึ้นสำหรับบัญชีผู้ใช้ของฉัน nanoมันมีการสร้างเป็นหนึ่งเดียวกับ ฉันทำสิ่งนี้และตั้งค่าคำสั่งที่แนะนำ เมื่อเลือก^W(ไฟล์เขียน) /tmp/crontab.6QN0vo/crontabชื่อไฟล์เริ่มต้นคือ: ชื่อไฟล์ดูผิดมาก คุณสามารถอัพเดตคำตอบสำหรับการสร้างcrontab -eไฟล์กำหนดค่าใหม่ได้หรือไม่ โปรดทราบว่าระบบของฉันได้ตั้งค่าให้ลบ/tmp/IG*ไฟล์ในวันเก่าซึ่งใช้งานได้ดีอยู่แล้ว (ฉันจำไม่ได้ว่าฉันตั้งลูกสุนัขตัวนั้นขึ้นมาอย่างไร)
WinEunuuchs2Unix

@ WinEunuuchs2Unix ไม่ต้องกังวลcronเปิดไฟล์นั้นชั่วคราว/tmpเมื่อคุณบันทึกเนื้อหาจะสร้าง / แทนที่ไฟล์/var/spool/cron/crontabs/<username>และถาวร
heemayl

6

heemaylได้ให้คำตอบที่ถูกต้องเพื่อให้cronสามารถทำงานที่ด้านบนของชั่วโมงและด้านล่างของชั่วโมง ขอบคุณอีกครั้ง! อย่างไรก็ตามเนื่องจากผู้ใช้รายอื่นค้นพบcronjobไฟล์เสียงที่ไม่สามารถเล่นได้ตามค่าเริ่มต้น:


การกำหนดค่าcronให้เล่นเสียง

เพื่อที่cronจะเล่นไฟล์เสียงมันต้องการexportตัวแปรสภาพแวดล้อม:

export XDG_RUNTIME_DIR="/run/user/1000"

เมื่อเสร็จแล้วในเสียงสคริปต์ของคุณจะเล่น

ในฐานะที่เป็นแหลมออกโดยคำตอบอื่นของ ID 1000ผู้ใช้อาจไม่เป็น วิธีค้นหา ID ผู้ใช้ของคุณ:

$ id

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

หาก ID ผู้ใช้ของคุณไม่ใช่ 1,000 ให้เปลี่ยนสคริปต์เป็น ID ของคุณ

กำหนดค่าcronให้ทำงานบนสุดของชั่วโมงและด้านล่างของชั่วโมง

crontab -e การตั้งค่า (5 บรรทัดสุดท้ายเท่านั้น):

# 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

ผู้ใช้ส่วนใหญ่ตั้งค่าcronให้ใช้nanoโปรแกรมแก้ไข ใช้ปุ่มควบคุมเหล่านี้nanoเพื่อบันทึกงานของคุณ:

  • เพิ่มสองบรรทัดสุดท้ายด้านบนและใช้Ctrl+ Oเพื่อเขียนO ut (บันทึก) ไฟล์
  • /tmp...ชื่อไฟล์ที่จะนำเสนอ Enterแต่ไม่ต้องกังวลเพียงแค่กด
  • ตอนนี้ใช้Ctrl+ Xเพื่อ e Xเป็นตัวnanoแก้ไข

bottom-of-hour-chimeสคริปต์วิ่งไปที่ด้านบนของชั่วโมงเกินไป แต่ที่มีการตกลงตั้งแต่มันสั้นและหวาน

หากคุณไม่มี>/dev/nullบรรทัดท้ายcronพยายามส่งอีเมลถึงคุณด้วยผลลัพธ์คำสั่ง หากคุณไม่มีการตั้งค่าเซิร์ฟเวอร์อีเมลข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นใน/var/log/syslogไฟล์ของคุณ:

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

การกำหนดค่าcronเพื่อแสดงการแจ้งเตือนแบบผุดขึ้น

สคริปต์จะแสดงข้อความแจ้งเตือนแบบผุดขึ้นที่ด้านบนของทุก ๆ ชั่วโมง ดังนั้นสำหรับตัวแปรเพิ่มเติมจำเป็นต้องส่งออก:

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

เนื้อหาของ 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%

export XDG_RUNTIME_DIR...มีความจำเป็นต้องได้รับเสียงที่จะเล่น นี่เป็นเพราะcronทำงานในสภาพแวดล้อมที่น้อยที่สุด บรรทัดนี้ควรละเว้นก่อนถ้าคุณใช้โปรแกรมเล่นเสียงของบุคคลที่สาม ถ้าไม่มีเสียงก็ใส่สายกลับ ถ้าอย่างนั้นก็ยังไม่มีเสียงล่าสัตว์มีความสุข!

ข่าวทีวีหลักสองเรื่องที่ฉันดูบนเน็ตนั้นมีระดับเสียงที่เบากว่าปกติดังนั้นฉันจึงหันทีวีขึ้นสูงกว่าปกติ ผลที่ตามมาเมื่อogg123เล่นไฟล์เสียงจะมีเสียงดังมาก ดังนั้นpactlจะใช้เพื่อลดระดับเสียงก่อนที่จะตีระฆังและเพิ่มขึ้นในภายหลัง

เนื้อหาของการตีระฆังชั่วโมงสุดท้าย

นี่เป็นสิ่งที่ซ้ำซ้อนtop-of-hour-chimeและอาจซ้ำซ้อนที่นี่ แต่รวมไว้เพื่อจุดประสงค์ในการจัดทำเอกสารเต็มรูปแบบ

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

แม้จะใช้การส่งออกนี้:

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

มันไม่ทำงาน

หลังจากเดือนของการวิจัยพบว่าไม่มีวิธีแก้ปัญหา

ในความสิ้นคิดลองต่อไปนี้และใช้งานได้:

ป้อนข้อมูลต่อไปนี้ใน 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

สร้างถัดไป .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"

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.