Tôi có thể sử dụng cron để kêu vang vào đầu giờ như đồng hồ của ông nội không?


8

Tôi bị lạc trong việc hỏi và đọc phần hỏi đáp trên Ubuntu và thử nghiệm các đoạn mã được đề xuất. Vì vậy, tôi thường bỏ lỡ việc chuyển kênh tin tức trên TV vào đầu giờ. Không phải là một vấn đề lớn đối với các kênh youtube cho phép thay đổi thời gian, nhưng đó là "nút chặn hiển thị" cho các kênh truyền hình sử dụng trình phát flash.

Có thể cronđược cấu hình để chạy một công việc vào đầu mỗi giờ, nơi tôi cung cấp một kịch bản để phát ra âm thanh của ông nội như tiếng chuông đồng hồ (dĩ nhiên với âm lượng âm thanh tinh tế!)? Một tiếng chuông nhỏ cũng có thể được phát ra vào cuối giờ. Tôi chắc chắn rằng tôi có thể xác định vị trí phù hợp .ogghoặc .ogacác tệp trên mạng và tôi biết tôi có thể sử dụng ogg123để phát chúng. Tôi chỉ không biết nếu croncó thể làm điều đó. Tôi biết rằng tôi có thể sử dụng một kịch bản ngủ và thức dậy để kiểm tra thời gian nhưng không thích ý nghĩ có thứ gì đó chạy mọi lúc (tôi nghĩ như vậy là đủ rồi).

Nếu điều này có thể được thực hiện với cronai đó có thể trả lời làm thế nào để thiết lập nó?

Cảm ơn bạn.


Tôi không giỏi về thành ngữ tiếng Anh. đầu mỗi giờ có nghĩa là bắt đầu mỗi giờ?
heemayl

1
@heemayl LOL có. Tôi đến từ một thời gian trước khi đồng hồ kỹ thuật số được phát minh và có một phút mà khi ở "trên cùng" có nghĩa là: 00 giờ và khi ở "dưới cùng" có nghĩa là: 30 giờ. Hehe
WinEunuuchs2Unix

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


@SDsolar điều này dường như là một sự thay thế cronnằm ngoài phạm vi của câu hỏi. FYI Tôi đã viết kịch bản đồng hồ ông nội trong câu trả lời dưới đây.
WinEunuuchs2Unix

Câu trả lời:


7

Vâng, bạn có thể.

Mở cronbảng của bạn với crontab -evà thêm:

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

Thay thế /path/to/player, và /path/to/file.oggvới các giá trị tương ứng bạn muốn.

Ở trên sẽ phát âm thanh (tức là chạy lệnh), vào mỗi giờ tại 00-th (bắt đầu đầu tiên) phút.

Nếu bạn cũng muốn chạy lệnh vào 30phút thứ nhất của mỗi giờ:

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

Khi gõ crontab -enó nói không có tệp nào được tạo cho tài khoản người dùng của tôi. Nó cung cấp để tạo một với nano. Tôi đã làm điều này và thiết lập các lệnh được đề xuất. Khi chọn ^W(ghi tệp) tên tệp mặc định là : /tmp/crontab.6QN0vo/crontab. Tên tập tin có vẻ rất sai. Bạn có thể cập nhật câu trả lời của bạn để tạo một crontab -etập tin cấu hình mới ? Lưu ý rằng hệ thống của tôi đã được thiết lập để xóa /tmp/IG*các tệp trong một ngày đã hoạt động tốt (tôi chỉ không nhớ cách tôi thiết lập chú chó con đó).
WinEunuuchs2Unix

@ WinEunuuchs2Unix Đừng lo lắng, hãy crontạm thời mở tệp đó /tmp, khi bạn lưu nội dung, sẽ tạo / thay thế tệp /var/spool/cron/crontabs/<username>và đó là vĩnh viễn.
heemayl

6

heemayl đã cung cấp câu trả lời chính xác cronđể chạy vào đầu giờ và cuối giờ. Cảm ơn một lần nữa! Tuy nhiên, vì những người dùng khác đã phát hiện ra một cronjobtệp âm thanh không thể phát theo mặc định:


Cấu hình cronđể phát âm thanh

Để cronphát các tệp âm thanh, nó cần đến exportmột biến môi trường:

export XDG_RUNTIME_DIR="/run/user/1000"

Một khi điều này được thực hiện trong kịch bản của bạn âm thanh sẽ phát.

Như được chỉ ra bởi một câu trả lời khác, ID người dùng của bạn có thể không phải lúc nào cũng vậy 1000. Để tìm ID người dùng của bạn, hãy sử dụng:

$ id

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

Nếu ID người dùng của bạn không phải là 1000, thì hãy thay đổi tập lệnh thành ID của bạn.

Cấu hình cronđể chạy đầu giờ và cuối giờ

crontab -e thiết lập (chỉ 5 dòng cuối cùng):

# 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

Hầu hết người dùng thiết lập cronđể sử dụng nanotrình chỉnh sửa. Sử dụng các phím điều khiển này nanođể lưu công việc của bạn:

  • Thêm hai dòng cuối cùng ở trên và sử dụng Ctrl+ Ođể ghi O ut (lưu) tệp.
  • Một /tmp...tên tệp được trình bày, nhưng đừng quan tâm, chỉ cần nhấn Enter.
  • Bây giờ sử dụng Ctrl+ Xđể e Xnanotrình soạn thảo.

Các bottom-of-hour-chimechạy kịch bản ở phía trên cùng của giờ quá nhưng, đó là OK vì nó ngắn và ngọt ngào.

Nếu bạn không có dòng >/dev/nullcuối croncố gắng gửi email cho bạn với đầu ra lệnh. Nếu bạn không cài đặt máy chủ thư, thông báo lỗi sẽ xuất hiện trong /var/log/syslogtệp của bạn :

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

Định cấu hình cronđể hiển thị thông báo bật lên

Kịch bản hiển thị một thông báo thông báo bật lên ở đầu mỗi giờ. Vì vậy, đối với điều này, một biến bổ sung cần phải được xuất:

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

Nội dung của 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%

Điều export XDG_RUNTIME_DIR...cần thiết là có được âm thanh để chơi. Điều này là do cronchạy trong môi trường tối thiểu. Dòng này nên được bỏ qua trước nếu bạn sử dụng trình phát âm thanh của bên thứ ba. Sau đó, nếu không có âm thanh đặt dòng trở lại. Sau đó vẫn còn nếu không có âm thanh, cũng hạnh phúc săn bắn!

Hai chương trình tin tức truyền hình chính mà tôi xem qua mạng có âm lượng mềm hơn bình thường nên tôi bật TV lên cao hơn bình thường. Do đó, khi ogg123phát các tập tin âm thanh, chúng phát ra âm thanh rất lớn. Vì vậy, pactlđược sử dụng để giảm âm lượng trước khi chuông và tăng nó sau đó.

Nội dung của tiếng chuông báo giờ

Đây gần như là một bản sao top-of-hour-chimevà có lẽ là dư thừa ở đây, nhưng được bao gồm cho các mục đích tài liệu đầy đủ.

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

Mặc dù sử dụng xuất khẩu này:

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

nó không hoạt động.

Sau nhiều tháng nghiên cứu không tìm thấy giải pháp.

Trong tuyệt vọng, đã thử những điều sau đây và nó đã hoạt động:

Nhập thông tin sau vào 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

Tạo tiếp theo .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"

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.