【第22期】观点:IT 行业加班,到底有没有价值?

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-...

Android app 的提醒功能

这篇文章涉及到利用AlarmManager
  • z_qian
  • z_qian
  • 2014-11-11 15:35
  • 1208

通过Thread配置定时器

在项目中需要不断的发送请求,我使用过Thread来实现 在sring.xml中配置,引入索要操作的类 实现的java代码:(去掉了相关的业务) pack

后台“待回复询盘”提醒功能实现

后台“待回复询盘”提醒功能   注意:不是新询盘数量,而是最近三天等待您回复的询盘数量哦!    “待回复询盘”数量是指在三天内您未通过速卖通系统回复的询盘数量。每半小时更新一次。    注意:...

功能开发-quartz定时器完成积分变动提醒功能

最近做了基于webserviceSAOP的一些接口功能,主要是我们这边线上的数据和客户那边的服务器的数据进行对接和同步,完成会员的注册,绑定,积分,余额查询,优惠券的查询核销,积分,余额的变动提醒等。...

ubuntu 定时执行任务

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

linux命令-at 定时执行任务

#atq 列出 at 的任务 #atrm n 删除任务号为n的任务 # at 时间 1.at 具体时间 # at 18:00 at> echo "at executed" > /home/jack/at.out at> #################### Ctrl + D job 15 at Wed Dec 30 18:00:00 2015 HH:MM[am|pm] + number [minutes|hours|days|weeks] 具体时间的格式: HH:MM [+ 3days] ### 3天后的某时间 执行 HH:

Ubuntu cron定时执行任务

转自:http://blog.chinaunix.net/u3/111961/showart_2359262.html cron,是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。 ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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