我可以使用 cron 像落地钟一样在整点时发出钟声吗?

我可以使用 cron 像落地钟一样在整点时发出钟声吗?

我沉迷于 askubuntu 阅读问答并尝试推荐的代码片段。所以我经常错过在整点时在互联网上切换电视新闻频道。对于允许时移的 YouTube 频道来说这不是什么大问题,但对于使用 Flash Player 的电视台来说,这是一个“节目终结者”。

是否可以cron配置为在每个小时的开始运行一项工作,我提供一个脚本来发出像老爷钟一样的钟声(当然,音量要小!)?也可以在小时结束时发出轻微的钟声。我确信我可以在网上找到合适的文件,而且我知道我可以用.ogg它们来播放它们。我只是不知道是否可以做到。我知道我可以使用一个休眠和唤醒的脚本来测试时间,但不喜欢一直运行某些东西的想法(我想已经有足够多这样的事情了)。.ogaogg123cron

如果可以做到这一点,cron有人可以回答如何设置吗?

谢谢。

答案1

希梅尔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不是1000,则将脚本更改为您的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写入ut(保存)文件。
  • 显示的是文件/tmp...名,但不要担心,只需按 即可Enter
  • 现在使用Ctrl+X到 eX它是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音前降低音量,在提示音后增加音量。

bottom-of-hour-chime 的内容

这几乎是重复的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%

答案2

是的你可以。

使用打开cron表格crontab -e,并添加:

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

/path/to/player将、 和替换/path/to/file.ogg为您所需的相应值。

00上述命令将在每小时的第-分钟(第一分钟开始)播放声音(即运行命令) 。

30如果您还想在每小时的第 - 分钟运行该命令:

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

答案3

尽管使用了这种导出:

# 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"

希望这可以帮助。

相关内容