我是否可以像祖父钟一样在头几个小时使用cron发出铃声?


8

我迷失在askubuntu中,阅读问答,并尝试使用推荐的代码片段。因此,我经常会错过每小时一刻在互联网上切换电视新闻频道的机会。对于允许时移的youtube频道来说,这不是一个大问题,但是对于使用Flash Player的电视频道来说,这是一个“节目停止器”。

可以cron配置为在每小时的最高时间运行一项工作,我提供一个脚本来听起来像时钟的钟声(当然,音量很小!)?一小时的钟声也可能会响起。我确定我可以在网上找到合适的文件.ogg.oga文件,并且知道可以ogg123用来播放它们。我只是不知道是否cron可以做到。我知道我可以使用可以睡眠和唤醒以测试时间的脚本,但是不喜欢一直运行某些东西的想法(我认为已经足够进行这些事情了)。

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

谢谢。


我的英语习语不是很好。每小时的顶部意味着每小时的开始?
heemayl

1
@heemayl哈哈是的。我来自发明数字时钟之前的时间,有一个分针表示,在“顶部”表示小时:00,而在“底部”表示小时:30。呵呵
WinEunuuchs2Unix '16

sudo易于得到安装mcron - stackoverflow.com/questions/44470965/...
SDsolar


@SDsolar这似乎是一个替代品,cron其问题超出了范围。仅供参考,我在下面的答案中写了祖父时钟脚本。
WinEunuuchs2Unix

Answers:


7

是的你可以。

使用打开croncrontab -e,然后添加:

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

替换/path/to/player,并/path/to/file.ogg与相应的价值你想要的。

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

如果您也想在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 '16

6

heemayl提供了正确的答案,可以让cron您在小时的顶部和小时的底部开始跑步。再次感谢!但是,由于其他用户发现cronjob默认情况下无法播放声音文件,因此:


配置cron播放声音

为了cron播放声音文件,它需要export一个环境变量:

export XDG_RUNTIME_DIR="/run/user/1000"

完成此操作后,脚本中将播放声音。

正如另一个答案所指出的那样,您的用户ID可能并不总是1000。要查找您的用户标识,请使用:

$ 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写入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"

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.