Keywords: Linux; Crontab; mutt; inxi

首先简单阐述下 Cron 的定义, 以下是摘子 wiki 的一段文字

” The software utility Cron is a time-based job scheduler in Unix-like computer operating systems. People who set up and maintain software environments use Cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration—though its general-purpose nature makes it useful for things like downloading files from the Internet and downloading emails at regular intervals. The origin of the name cron is from the Greek word for time, χρόνος (chronos).  …”

应该不需要翻译吧,从  chrono- 这个 prefix 就可以看出, Cron 是一个你给电脑制定的日程表,在固定时间执行 机器命令 和 含有你目的的脚本。

比方说,

  • 你有习惯在每周一的早晨9点 进行下更新,
     sudo apt-get update
    sudo apt-get upgrade
  • 你需要每天下班的时候将一个重要文件备份一次到 Dropbox 中;
  • 你想要在半夜网速宽裕些的时候用 wget 下的什么东西;
  • 你可以将 Cron 与其他功能串联,以达到更多效果,比如 mutt;
  1. 你也可以将系统的某个 syslog 按时发送到手机上,对你的电脑进行暗示监控;
  2. 进行天气预报的发送(当然你会觉得你可以看手机APP,但是一个是主动状态,一个是被动状态),当然这需要配合一些天气预报的小程序(例如 inxi)
  3. 再者, 你可以写一些有趣的小程序,让电脑定时运行,并且将运行信息按时发送邮件到手机上

你可以发挥创造力, 让 Cron 执行你定制的任务。在博文的最后,我会给出我的一个小程序来进行说明,在这个小程序中,我用 C++ 编译了一个计算个人生理周期的程序,我让 Cron 每天按时执行一次,并将结果通过 mutt 按时发送到手机上。

首先看下,你系统上现有的在运行的 crontab 任务, 在 terminal 中执行

 crontab -l 

如果没有任何显示,说明这是你的第一次制定。通过

 crontab -e 

来打开和编辑任务。

经常困扰的是,任务的时间格式。总共有5个点需要设置,依次顺序是从小到大延伸: 
分钟,小时,日,月,星期 。 如果要表示 “每一" 就输入 * 来表示
 # ┌───────────── min (0 - 59) 
 # │ ┌────────────── hour (0 - 23)
 # │ │ ┌─────────────── day of month (1 - 31)
 # │ │ │ ┌──────────────── month (1 - 12)
 # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  command to execute

Examples:

  • Introduction
0   9   *   *   1     cleanUp.sh 

表示在每周一的造成9点整执行一个叫 cleanUp 的脚本

0   9   *   *   1-5   cleanUp.sh 

表示在工作日(周一到周五)执行 cleanUp 脚本, 以此类推。

  • Backup

首先写个 shell 脚本 (backup.sh), 假设你的文件夹路径为 /home/USER/Desktop/example, 备份好后剪切到 Dropbox 文件夹下。

#!/bin/bash
#This is a script for backuping your specific directories
now=$(data +"%m-%d-%Y")
cd /home/user/Desktop/example
tar -zcf example_"now".tgz example
mv *.tgz /home/USER/Dropbox/

Note: 此 shell 脚本必须剪切到 /usr/local/bin, 或者 /usr/bin/ 下,不然不会运行, 并将属性改为可执行(+x)。其中 now 的加入是为了备份文件中包含备份的日期, 以便日后版本区分。

然后在 crontab 中增加一行(时间请按需选择) ,通过 echo 将运行提示信息 cat 到某个文件(比如.log_example)中, 以便浏览

* * * * * /usr/bin/backup.sh | echo "`date +"\%d-\%m-\%Y"`:The backup of example directory" >> /home/USER/.log_example 
  • periodically clean up duty

也是先写一个 shell 脚本, 这次不需要涉及路径设置。

#!/bin/bash
echo "The periodic cleanup mission starts"
sudo apt-get autoremove
sudo apt-get remove
sudo apt-get autoclean
sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade
echo "The mission is done" 

然后在 crontab 中另增加一行(时间仍按需选择) ,通过 echo 将运行提示信息 cat 到某文件 .log_example 中, 以便浏览

* * * * * /usr/bin/cleanUp.sh | echo "`date +"\%d-\%m-\%Y"`:The periodic cleanUp script has run" >> /home/USER/.log_example 
  • email information to your handy

首先要配置 mutt 邮箱, 请参看另一篇博文;

不需要写脚本, 直接在 crontab 中增加一行, 比如将上面的 .log_example 文件(可以是任何你关心的 syslog 文件)定时发送到你手机邮箱上

* * * * * mutt -s "THE SUBJECT OF YOUR EMAIL: `date +"\%d-\%m-\%Y"`" YOUR EMAIL ADDRESS < /home/USER/.log_example 
  • get the weather information

安装一个能在 terminal 中运行的 软件, 例如 inxi

 sudo apt-get install inxi 

在 terminal 中运行

 inxi -xxxW Beijing,China 

验证下是否可行。

最后在 crontab 中增加一行,意在将信息发送到手机邮箱,

* * * * * inix -xxxW Beijing,China > /home/USER/.log_weather 2>&1;
* * * * * mutt -s "Today's weather" YOUR EAMIL < /home/USER/.log_weather 
  • 有趣的自定义程序

首先在我的 GitHub 中下载源程序, 并将

 birth_YY = ; birth_MM = ; birth_DD = ;

一行中参数改成你自己的生日; 然后用在 terminal 中用 g++ 编译,后增加可执行属性(+x)并剪切到 /usr/bin/ 下

 g++ main.cpp -o haveFun

在 crontab 中增加一行,

* * * * * echo "`date + "\%d-\%m-\%Y"`" > /home/USER/.log_havefun

* * * * * /usr/bin/haveFun >> /home/USER/.log_havefun 2>&1

* * * * * mutt -s "SUBJECT" YOUR EMAIL < /home/USER/.log_havefun

您就能每天暗示接收到这个小程序跑的有关于你今天心里指数的信息。

  • SUMMARY

利用好 Cron, 可以剩下很多人为的劳动力,也许这就是歪国同事们崇尚的 work smart 吧。

Advertisements

4 thoughts on “Cron,计划运行程序并邮件信息到手机上

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s