我沉迷于 askubuntu 阅读问答并尝试推荐的代码片段。所以我经常错过在整点时在互联网上切换电视新闻频道。对于允许时移的 YouTube 频道来说这不是什么大问题,但对于使用 Flash Player 的电视台来说,这是一个“节目终结者”。
是否可以cron
配置为在每个小时的开始运行一项工作,我提供一个脚本来发出像老爷钟一样的钟声(当然,音量要小!)?也可以在小时结束时发出轻微的钟声。我确信我可以在网上找到合适的文件,而且我知道我可以用.ogg
它们来播放它们。我只是不知道是否可以做到。我知道我可以使用一个休眠和唤醒的脚本来测试时间,但不喜欢一直运行某些东西的想法(我想已经有足够多这样的事情了)。.oga
ogg123
cron
如果可以做到这一点,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"
希望这可以帮助。