linux · 2021年 8月 8日 0

计划任务

计划任务 at/crontab

在指定的时间段自动启用或停止某些服务或命令

一次性计划任务

为了提交一个at作业步骤:

  1. 输入at命令同时指定作业执行的时间 ,按下Enter键;
  2. 在at命令提示符“at >”下,输入命令或者shell脚本
  3. 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 周期循环进行提醒

  1. 建立 tomato_clock
export DISPLAY=:0; timeout 5m  feh -F ~/Pictures/coffee_break1920x1080pisa.jpg;
  1. 设置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';
TOC