计划任务 at/crontab
在指定的时间段自动启用或停止某些服务或命令
一次性计划任务
为了提交一个at作业步骤:
- 输入at命令同时指定作业执行的时间 ,按下Enter键;
- 在at命令提示符“at >”下,输入命令或者shell脚本
- Ctrl+D 提交at作业。
liupei@T470:$ at 2111
warning: commands will be executed using /bin/sh
at> notify-send '该休息了!'
at> <EOT>
job 7 at Sun Aug 8 21:11:00 2021
echo "notify-send '该休息了'" | at 20:54
显示at作业及作业队列
liupei@T470:~at -l
8 Sun Aug 8 21:30:00 2021 a liupei
liupei@T470:~ atq
8 Sun Aug 8 21:30:00 2021 a liupei
显示已经设置的任务内容
at -c 任务号
liupei@T470:~$ at -c 8
notify-send '该休息了!
删除at作业
atrm 任务号 或者 atrm 文件名
at -d 任务号 at -d 文件名
atrm 8
错误提示
- Can’t open /var/run/atd.pid to signal atd. No atd running? at服务没有启动,启动那个服务即可
sudo systemctl start atd.service
长期性计划任务
设定任务
liupei@T470:~$ crontab -e
no crontab for liupei - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]: 2
在接下来的文本最下面输入,以下内容表示每一个小时提醒休息一次
0 */1 * * * notify-send "休息" "该休息了!!!"
输入参数依次是:
minute hour day month week command
查看定时任务列表
如果有的话,将会列出来
liupei@T470:~$ crontab -l
# m h dom mon dow command
0 */2 * * * notify-send "休息" "该休息了!!!"
取消定时任务
liupei@T470:~crontab -r
liupei@T470:~ crontab -l
no crontab for liupei
把notify-send写在一个脚本里:
root@pc:~cat cmdfile
#!/bin/bash
export DISPLAY=:0
notify-send "test"
root@pc:~
然后直接在crontab -e里调用脚本:
*/30 * * * * sh /path_to_file/cmdfile
弹窗提醒
notify-send "Title" "Message"
notify-send -i face-crying "System Malfunction" "Something bad happened."
notify-send -i weather-storm "Storm Alert" "There's a storm coming your way."
notify-send -i lock-screen "Password Required" "You need a password to access this device."
参考文献,a list of icons you can use in your applications
自制番茄时钟
测试命令
echo 'env DISPLAY=:0 feh -F Pictures/homePicture.jpg' | at now+1 minutes
解释一下以上的命令:
- echo :用于把单引号扩起来的命令作为要执行的指令传递给 at 命令。
- at now+1 minutes :表示在当前时间之后 1 分钟执行。
- env DISPLAY=:0 :feh 命令需要指定 DISPLAY 环境变量,在 Linux / Unix 类操作系统上,DISPLAY 变量用来设置将图形显示到何处。
- feh -F ~/protect_eyes.jpg :用 feh 来显示 ~/Pictures/homePicture.jpg 这张图片。-F 参数表示
全屏显示
图片。
所以上面的命令表示:在当前时间
的 1 分钟之后,用 feh 来全屏显示 homePicture.jpg 这张图片。
编写SHELL
用文本编辑器来创建一个 Shell 脚本好了,名字就叫 tomato_clock
vim tomato_clock
然后在里面写入以下代码 :
#!/bin/zsh
echo 'env DISPLAY=:0 feh -F ~/Pictures/homePicture.jpg' | at now+30 minutes
我用的是 z shell
, 如果用的 bash
请根据个人情况更改为 #!/bin/bash
。
保存退出。我这里设置了 30 分钟,你可以随便设置延迟时间。
把脚本保存在PATH
路径下
mv tomato_clock .local/bin -vi
,之后,就可以在随便那个目录中输入
tomato_clock
来启动一个番茄钟了。一个番茄钟到点之后,就会显示你自定义的图片。然后你可以再启动一个。
参考文献:
版本改进:
通过 crontab 周期循环进行提醒
- 建立 tomato_clock
export DISPLAY=:0; timeout 5m feh -F ~/Pictures/coffee_break1920x1080pisa.jpg;
- 设置crontab
crontab -l
*/30 * * * * /home/liupei/.local/bin/tomato_clock
每 30 分钟,休息 5 分钟,5 分钟后自动关闭全屏图片,并重新计时
参考文献:
var geometry = ee.Geometry.Rectangle([108, 19.0, 108.5, 19.5]);
var satellite = 'L8';
var date_start = '2021-01-01';
var date_end = '2021-01-3';