搞了一个整点报时的小项目,软路由、树莓派、和所有linux设备可用
项目已开源在了 gitlab 和 github 两大平台上,项目地址是:
https://gitlab.com/timeline.menu/hourly_chime
https://github.com/rootexplorer/hourly_chime
----
工作的原因,经常在电脑面前一坐几个小时,自己深知这是对自己的健康十分不负责任的一种行为方式,所以我想到让电脑每小时提醒我一下,于是就有了这个小项目。
每隔一段时间提醒一下,其实可以是隔任意长的时间,只是我为了同时也可以当作时钟来用,所以就搞成了整点报时。
整点报时的功能在很多挂钟上都有,但是放在电脑上时就有些没那么流行了。我知道的在windows上有不少恶意软件就在钻这个空子,里面植入的木马、病毒、广告数不胜数,好在我不用windows...
----
本项目基于 linux 系统,并不对硬件平台作任何限制,只要是能运行 linux 的硬件平台都行。而且对于发行版也没有特殊的要求,不管是redhat系的,还是debian系的,还是别的都可以。这意味着软路由、树莓派之类的都可以使用。
----
软件依赖:
cron 可以是 cronie 或者 别的,只要是 cron 就行 , 本程序默认使用 cronie ,使用其它时就对应的修改 cron 文件
shell 可以是 sh 也可以是 bash 也可以是别的 , 本程序默认使用 sh ,使用其它时就对应的修改 cron 文件
mplayer 这是一个播放器,如果你有自己青睐的播放器也是可以的,但请注意的是,我们这是在后端运行,所在前端很漂亮的播放器并不能发挥它的特长,而且不同的软件作者的逻辑设定不会相同,也许会出现前端界面打不开就直接退出的情况,所以选择时要选择可以在命令行中运行的播放器。本程序默认使用 mplayer ,使用其它时就对应的修改 cron 文件
XDG 这个... 提供执行权限,没有它的话,shell就不能成功调用播放器,并且提示没有权限。
----
使用方式:
1. 到需要定时播报的设备上安装所依赖的程序。因为不同的发行版有着不同的安装方式,所以我无法在此列出所有的安装方式。请自行查阅自己设备上的软件安装指南。
2. 下载 audios 里面的声音文件。当然,如果你觉得那个声音不好听,也可以自己录制。对于声音的格式是没有要求的,只要你选择的播放器能播放就行。
放到设备的存储当中。比如我放在了 /mnt/apps/hourly_chime/audios/export/ 中
3. 建立日志文件夹。 我这里使用的日志文件夹是 /mnt/logs/hourly_chime/ 如果你有自己习惯的日志记录路径,请对应更改命令中的参数
sudo mkdir -p /mnt/logs/hourly_chime
sudo chmod 777 /mnt/logs/hourly_chime
4. 建立 cron 的定时任务
4.1. 查询用于播报的用户的 uid
在 .sh 中执行时需要用到 XDG ,因此需要指定 XDG_RUNTIME_DIR,格式为 XDG_RUNTIME_DIR=/run/user/<uid> <command> ,其中 uid 的查询方式是 cat /etc/passwd | grep <username> 。
例如:本例中用到的播报用户名是 expl
所以查询命令是
cat /etc/passwd | grep expl
返回信息是
expl:x:1000:984::/home/expl:/bin/bash
所以我们得到 expl 的 uid 是 1000
4.2. 新建文件 /etc/cron.d/hourly_chime_cron 在里面写入以下内容,每行顶格开始写,可以直接复制,但要记得对应修改 用户名, uid , 声音文件地址 , 日志文件地址 这四种项目。
# hourly_chime's cron job
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=expl
HOME=/home/expl/
#
#
#
#
#
#
0 0 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/00.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 1 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/01.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 2 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/02.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 3 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/03.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 4 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/04.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 5 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/05.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 6 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 15 /mnt/apps/hourly_chime/audios/export/06.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 7 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 35 /mnt/apps/hourly_chime/audios/export/07.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 8 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/08.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 9 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/09.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 10 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/10.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 11 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/11.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 12 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/12.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 13 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/13.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 14 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/14.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 15 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/15.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 16 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/16.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 17 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/17.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 18 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/18.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 19 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/19.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 20 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/20.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 21 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 50 /mnt/apps/hourly_chime/audios/export/21.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 22 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 25 /mnt/apps/hourly_chime/audios/export/22.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 23 * * * expl XDG_RUNTIME_DIR=/run/user/1000 mplayer -volume 20 /mnt/apps/hourly_chime/audios/export/23.wav >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_play.txt
0 0 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 1 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 2 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 3 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 4 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 5 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 6 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 7 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 8 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 9 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 10 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 11 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 12 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 13 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 14 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 15 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 16 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 17 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 18 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 19 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 20 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 21 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 22 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
0 23 * * * expl date +'\%Y-\%m-\%d.\%H:\%M:\%S.\%N' >> /mnt/logs/hourly_chime/hourly_chime_`date +'\%Y-\%m-\%d'`_log.txt
4.3. 更改这个 cron 文件的权限
sudo chown root:root /etc/cron.d/hourly_chime_cron
sudo chmod 644 /etc/cron.d/hourly_chime_cron
改完后我习惯性的查看一下
ls -laZh /etc/cron.d/hourly_chime_cron
cat /etc/cron.d/hourly_chime_cron
4.4. 如果你的 cron 需要重启才能生效的话,记得就要重启cron服务喔。
5. 给你的设备接上音箱吧。当然你也可以使用耳机,但耳机并不总是戴在耳朵上,会造成即使播报了你也没听见的情况。
本文转自 : https://www.timeline.menu/article/co/整点报时.html
Ad blocker detected: Our website is made possible by displaying online advertisements to our visitors. Please consider supporting us by disabling your ad blocker on our website.
搞了一个整点报时的小项目,软路由、树莓派、和所有linux设备可用
programmer 程式師 程序员
Return to “programmer 程式師 程序员”
Jump to
- ↳ business commerce trade trading 商業 商业
- ↳ Business Case 商業案例 商业案例
- ↳ manage 管理 管理
- ↳ agriculture 農業 农业
- ↳ agriculture 農業 农业
- ↳ hardware 硬體 硬件
- ↳ hardware 硬體 硬件
- ↳ motherboard 主機板 主板
- ↳ manned intermedia 載人的載具 载人的载具
- ↳ residential area 居民小區 居民小区
- ↳ residential area 居民小區 居民小区
- ↳ 广东·广州·越秀·大学城·和樾府
- ↳ software 軟體 软件
- ↳ software 軟體 软件
- ↳ c
- ↳ php
- ↳ ddns
- ↳ python
- ↳ Computer Aided Design 電腦輔助設計 计算机辅助设计
- ↳ manned intermedia Design 載人的載具設計 载人的载具设计
- ↳ creativity 創意 创意 idea 想法 想法 Works show 作品展示 作品展示
- ↳ dating 約會 约会 交友 Marriage 婚戀 婚恋
- ↳ Marriage 婚戀 婚恋
- ↳ 荷尔蒙飞扬 七日情侣 陌生人交友 陌陌 探探
- ↳ dating 約會 约会 交友
- ↳ education study examination 教育 學習 考試 教育 学习 考试
- ↳ 广州大学城论坛
- ↳ 济南大学城论坛
- ↳ emotional venting 情緒發洩 情绪发泄
- ↳ Violations of law and discipline are exposed 違法亂紀行為曝光 违法乱纪行为曝光
- ↳ Comment on various businesses. 對各種經營進行評論。 对各种经营进行评论。
- ↳ leisure && amusement | 休閒 娛樂 | 休闲 娱乐
- ↳ | Experienced programmer | The home of experienced programmer | 大齡程式師之家 | 大龄程序员之家 | 經驗豐富的程式師 | 经验丰富的程序员 |
- ↳ Life Records 生活記錄 生活记录
- general
- ↳ general
- citizen 公民 公民
- ↳ citizen 公民 公民
- ↳ let's make the rules 讓我們來製定規則 让我们来制定规则
- | Developer | 開發者 | 开发者 |
- ↳ | Developer | 開發者 | 开发者 |
- ↳ | Developer | 開發者 | 开发者 |
- ↳ | Developer Union | 開發者工會 | 开发者工会 |
- ↳ | The home of programmers | 程式師之家 | 程序员之家 |
- ↳ programmer 程式師 程序员
- ↳ Programmers Union 程式師工會 程序员工会
- ↳ Find Jobs/Post a Job 求職/發布職缺 找工作/发布职位
- | Exploration, research, various forms, miscellaneous talks | 探索、研究、百態、雜談 | 探索、研究、百态、杂谈 |
- ↳ | Exploration, research, various forms, miscellaneous talks | 探索、研究、百態、雜談 | 探索、研究、百态、杂谈 | 發現 发现 Discovery |
- ↳ education study examination 教育 學習 考試 教育 学习 考试
- ↳ driver license 駕照 驾驶证
- house : building , buy and sell , lease 房子:建设、买卖、租赁
- ↳ house : building , buy and sell , lease 房子:建设、买卖、租赁
- | Internet Refugee Shelter | 網路難民收容所 | 互联网难民收容所 |
- ↳ | Internet Refugee Shelter | 網路難民收容所 | 互联网难民收容所 |
- 儒教迫害受害者互助区
- ↳ 儒教迫害受害者互助区
- 广告区
- ↳ 广告区