Linux(Ubuntu)定时提醒/执行任务

原创 2015年11月19日 14:21:08

当我们需要一些自动定时提醒或者每天下班自动执行备份,定期自动重启某些服务清理某些缓存时,如何在大Linux上使用几句shell命令完成实现这份任务的自动化呢? notify-send和crontab的结合就可以轻松实现定时执行,自动弹出通知提醒等。

shell命令notify-send

 程序包libnotify-bin为X桌面系统提供了向桌面发送通知的功能,Ubuntu 9.04之后已经自带该功能,其它Linux发行版根据具体情况先安装,ubuntu安装示例:
apt-get install libnotify-bin
使用notify-send命令介绍如下(man notify-send命令查看):

http://manpages.ubuntu.com/manpages/gutsy/man1/notify-send.1.html

 notify-send "NotifyTest" "I am a test notification."
 notify-send "Notification Title" "The message body is shown here" -i /home/jokerlee/icon.png -t 1000 

使用NotifyOSD定制Ubuntu 14.04的通知行为,打造更酷炫多样的通知形式
参考> http://imcn.me/html/y2014/19785.html

Linux crontab命令

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的任务计划表。
crontab -r : 删除目前的任务表 
crontab -l : 列出目前的任务表 
crontab -e : 执行文字编辑器来设定任务表

crontab编辑查看示例

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute   hour   day   month   week   command
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

Crontab文件内命令和脚本的编写

有时我们加入crontab内的任务无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。

例如工作日每天十点提醒到OA系统去做一些签到预订什么的例子如下:

 * 10 * * 1-5 . /home/jokerlee/notify_dinner

脚本示例

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)"
export DISPLAY=:0

因为执行GUI程序需要提供DISPLAY环境变量,而ubuntu 14.04根据资料还需要提供DBUS_SESSION_BUS_ADDRESS environment variable
具体原因可以查看stack overflow上大神的回答 > http://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab/346580#346580

PS:

crontab新增的任务需要重启cron服务才会立即生效
ubuntu重启命令:
    sudo service cron restart 
    sudo /etc/init.d/cron start

更多发行版的cron服务启动> http://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/

cron服务执行每一条任务都会将输出信息通过电子邮件的形式发送给当前系统用户或者记录在系统日志/var/log/syslog(ubuntu 14.04,同样查看该文件可以知晓加入的定时任务是否正常按时运行),这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。
可以在crontab文件中设置如下形式,忽略日志输出:
0 /3 * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

参考资料

crontab更详细的使用介绍:

http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

notify-send与inotify的结合使用:
http://www.baozy.com/archives/12084.html

版权声明:本文为博主原创文章,转载请注明出处。

ubuntu定时体息提醒软件

好用。 sudo apt-get install workrave +Linux 定時提醒器 – 定時讓眼睛、身體休息 http://www.technow.com.hk/linux-...

linux/mac定时任务

设置cron任务示例linux/mac下的定时执行主要是使用crontab文件中加入定制计划来执行,Cron本身是一个守护进程,在后台运行,通过配置文件“crontab”来根据时间调度指定的作业执行。...

Linux定时运行命令脚本——crontab

Linux中,周期执行的任务一般由cron这个守护进程来处理  ps -ef | grep cron  cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。 cron的...

ubuntu定时执行任务crontab的使用

先来说下场景,需要写一个爬虫,定时从某个接口地址获取数据,然后存入本地数据库。 因此就需要一个可定时执行的东西,之前在the5fire的知识体系中除了可以在数据库中定时执行某个存储过程或者sql...

Ubuntu cron 定时执行任务

cron,是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。 1. 关于crontab 在Ubuntu server  下,cron是被默认安装并启动的。通过/etc/cr...

ubuntu 定时执行任务

Ubuntu下crontab命令的用法 正文 cron是一个Linux下的后台进程,用来定期的执行一些任务。因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但...

Ubuntu cron 定时执行任务

cron,是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。 1. 关于crontab 在Ubuntu server  下,cron是被默认安装并启动的。通过/etc/cr...

ubuntu定时执行任务

前几天女神给我发了条消息,“为什么我每天早上九点都会收到你给我发的天气信息的邮件?”然后…… 当然,我是不可能告诉她,我是用crontab来定时执行python脚本滴! 好了,废话不多说,直接进入...

Ubuntu 定时执行任务

Ubuntu 使用crontab定时任务 1. 使用crontab -e命令 这个命令的使用比较简单。直接输入 ~# crontab -e 就会打开一个编辑窗口,第一行会有内容...

Linux crontab定时执行任务 命令格式与详细例子

基本格式 : *  *  *  *  *  command 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux(Ubuntu)定时提醒/执行任务
举报原因:
原因补充:

(最多只允许输入30个字)