173 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			173 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Automating Tasks | |||
|  | localeTitle: 自动化任务 | |||
|  | --- | |||
|  | ### 自动化任务或任务计划
 | |||
|  | 
 | |||
|  | Linux的一项功能专门用于Web服务器,称为CRON 我们知道任何Web服务器最引人注目的功能之一就是它始终如一 开机并始终连接到互联网。这意味着我们可以指导 我们的服务器自动执行任务,无需我们输入命令 变成一个壳。执行_其他程序_最常用的_程序之一_ 常规频率称为`cron` 。我们来看看如何使用 `cron`安排一个程序运行。 | |||
|  | 
 | |||
|  | `cron`程序是称为**守护进程的程序**系列的一部分。一个守护进程 是一个始终在我们的计算机后台运行的程序。第一, 让我们看看`cron`是否正在运行。我们可以获得所有正在运行的程序的列表 使用`-A`标志时使用`ps`命令: | |||
|  | 
 | |||
|  | \`\`\`{r,engine ='bash',eval = FALSE} ps -A | |||
|  | 
 | |||
|  | ## PID TTY TIME CMD
 | |||
|  | 
 | |||
|  | ## 1? 00:00:13 systemd
 | |||
|  | 
 | |||
|  | ## 2? 00:00:00 kthreadd
 | |||
|  | 
 | |||
|  | ## 3? 00:00:03 ksoftirqd / 0
 | |||
|  | 
 | |||
|  | ## 5? 00:00:00 kworker / 0:0H
 | |||
|  | 
 | |||
|  | ## 7? 00:00:11 rcu\_sched
 | |||
|  | 
 | |||
|  | ## 8? 00:00:00 rcu\_bh
 | |||
|  | 
 | |||
|  | ## 9? 00:00:00迁移/ 0
 | |||
|  | 
 | |||
|  | ## ...
 | |||
|  | ``` | |||
|  | You probably have a huge list of programs in your terminal now! Instead of  | |||
|  |  shifting through this listing line-by-line, let's pipe the output of this command  | |||
|  |  to `grep` and we'll look for `cron`:  | |||
|  | ``` | |||
|  | 
 | |||
|  | {r,engine ='bash',eval = FALSE} ps -A | grep“cron” | |||
|  | 
 | |||
|  | ## 1273? 00:00:01 cron
 | |||
|  | ``` | |||
|  | # You might or might not get a `cron` running . 
 | |||
|  |   | |||
|  |  Looks like the `cron` daemon is running! In order to assign programs to be  | |||
|  |  executed with `cron` we need to edit a special text file called the `cron`  | |||
|  |  table. Before we edit the `cron` table we need to select the default text  | |||
|  |  editor. If you like using `nano` (the text editor we've been using throughout  | |||
|  |  this book) then enter `select-editor` into the console, type in the number  | |||
|  |  that corresponds to `nano` (usually `2`) and then press enter:  | |||
|  | ``` | |||
|  | 
 | |||
|  | {r,engine ='bash',eval = FALSE} 选择编辑器 | |||
|  | 
 | |||
|  | ## 选择一个编辑器。要稍后更改,请运行“select-editor”。
 | |||
|  | 
 | |||
|  | ## 1\. / bin / ed
 | |||
|  | 
 | |||
|  | ## 2\. / bin / nano <----最简单
 | |||
|  | 
 | |||
|  | ## 3\. /usr/bin/vim.basic
 | |||
|  | 
 | |||
|  | ## 4\. /usr/bin/vim.tiny
 | |||
|  | 
 | |||
|  | ## 选择1-4 \[2\]:
 | |||
|  | ``` | |||
|  | Now that we've chosen a text editor we can edit the `cron` table using the  | |||
|  |  command `crontab -e` (**`cron`** **tab**le **e**dit) which will automatically  | |||
|  |  open `nano` with the appropriate file.  | |||
|  | ``` | |||
|  | 
 | |||
|  | {r,engine ='bash',eval = FALSE} crontab -e | |||
|  | 
 | |||
|  | # 编辑此文件以介绍要由cron运行的任务。
 | |||
|  | 
 | |||
|  | # | |||
|  | 
 | |||
|  | # m h dom mon dow命令
 | |||
|  | ``` | |||
|  | Let's go over the layout of the `cron` table. First you should notice that any  | |||
|  |  text after a pound sign (`#`) is a comment, so it's not seen by `cron` (just  | |||
|  |  like bash comments). The `cron` table has six columns:  | |||
|  |   | |||
|  |  1. Minute (`m`)  | |||
|  |  2. Hour (`h`)  | |||
|  |  3. Day of Month (`dom`)  | |||
|  |  4. Month (`mon`)  | |||
|  |  5. Day of Week (`dow`)  | |||
|  |  6. Command to be run (`command`)  | |||
|  |   | |||
|  |  Each column is separated by a single space in the table. The first five columns  | |||
|  |  allow you to specify when you want a particular command to be run. Only certain  | |||
|  |  values are valid in each column:  | |||
|  |   | |||
|  |  1. Minute: `00 - 59` (A particular minute in an hour)  | |||
|  |  2. Hour: `00 - 23` (0 is the midnight hour)  | |||
|  |  3. Day of Month: `01 - 31` (1 is the first day of the month)  | |||
|  |  4. Month: `01 - 12` (1 is January)  | |||
|  |  5. Day of Week `0 - 6` (0 is Sunday)  | |||
|  |   | |||
|  |  There are also a few other characters that are valid in the `cron` table. The  | |||
|  |  most commonly used character is a star (`*`) which represents *all* of the  | |||
|  |  possible values in a column. So a star in the Minute column means "run every  | |||
|  |  minute," and a star in the Hour column means "run during every hour."  | |||
|  |  Knowing this let's make our first entry in the `cron` table. If we want a  | |||
|  |  command to be executed every minute, during every hour, on every day of the  | |||
|  |  month, during every month, on every day of the week, then we can put stars in  | |||
|  |  all of the first five  | |||
|  |  columns, followed by the command that we want to run. In this case the command  | |||
|  |  that `cron` will run every minute will be `date >> ~/date-file.txt`, which will  | |||
|  |  append the date and time when the command is executed to a file in our home  | |||
|  |  directory called `date-file.txt`. This is what your `cron` table should look  | |||
|  |  like before you save and exit from `nano`:  | |||
|  | ``` | |||
|  | 
 | |||
|  | # 编辑此文件以介绍要由cron运行的任务。
 | |||
|  | 
 | |||
|  | # | |||
|  | 
 | |||
|  | # m h dom mon dow命令
 | |||
|  | 
 | |||
|  | *   \* \* \* \* date >>〜/ date-file.txt | |||
|  | ``` | |||
|  | Save and exit `nano` just like you would for a regular text file and then wait  | |||
|  |  a little bit! After a minute has gone by use `cat` to look at `~/date-file.txt`:  | |||
|  | ``` | |||
|  | 
 | |||
|  | {r,engine ='bash',eval = FALSE} 光盘 cat date-file.txt | |||
|  | 
 | |||
|  | ## Thu Jun 8 18:50:01 UTC 2017
 | |||
|  | ``` | |||
|  | Look like our entry in the `cron` table is working! Wait another minute and then  | |||
|  |  look at the file again:  | |||
|  | ``` | |||
|  | 
 | |||
|  | {r,engine ='bash',eval = FALSE} cat date-file.txt | |||
|  | 
 | |||
|  | ## Thu Jun 8 18:50:01 UTC 2017
 | |||
|  | 
 | |||
|  | ## 星期四8月18日18:51:01 UTC
 | |||
|  | ``` | |||
|  | Unless we delete the line that we entered in the `cron` table, the output from  | |||
|  |  `date` will be appended to `date-file.txt` every minute.  | |||
|  |   | |||
|  |  The single line of bash `date >> ~/date-file.txt` is a much simpler program than  | |||
|  |  we would probably use in a `cron` table, though it's good for illustrating how  | |||
|  |  a `cron` table works. If you want to do more complex tasks with `cron` it's  | |||
|  |  better for `cron` to execute a bash script that you've written in advance. That  | |||
|  |  way you can just specify `bash /path/to/script.sh` in the last column of the  | |||
|  |  table.  | |||
|  |   | |||
|  |  Using stars in all columns is the simplest line of a `cron` table, so let's  | |||
|  |  look at some examples of more complex table entries:  | |||
|  | ``` | |||
|  | 
 | |||
|  | # m h dom mon dow命令
 | |||
|  | 
 | |||
|  | 00 \* \* \* \* bash /path/to/script.sh#每小时开始运行一次 00 12 \* \* \* bash /path/to/script.sh#每天中午运行 | |||
|  | 
 | |||
|  | *   12 \* \* \* bash /path/to/script.sh#在下午12点到12点59分之间每分钟运行一次 00 00 05 \* \* bash /path/to/script.sh#每个月的第5天午夜运行 00 00 \* 07 \* bash /path/to/script.sh#在7月的午夜每天运行 00 00 \* \* 2 bash /path/to/script.sh#每周二午夜运行 | |||
|  | ``` | |||
|  | Besides numbers and the star there are a few other characters that you can use  | |||
|  |  in `cron` table columns including a hyphen (`-`) for specifying ranges and a  | |||
|  |  comma (`,`) for specifying lists of items. For example `00-29` in the Minutes  | |||
|  |  column would specify the first thirty minutes of an hour, while `1,5` in the  | |||
|  |  Day of Week column would specify Monday and Friday.  | |||
|  |   | |||
|  |  Let's take a look at another example of a `cron` table that uses hyphens and  | |||
|  |  ranges so you can get a sense of how each character works.  | |||
|  | ``` | |||
|  | 
 | |||
|  | # m h dom mon dow命令
 | |||
|  | 
 | |||
|  | 00-04 \* \* \* \* bash /path/to/script.sh#每小时的前五分钟每分钟运行一次 00 00 \* \* 0,6 bash /path/to/script.sh#每周六和周日午夜运行 00 03 01-15 \* \* bash /path/to/script.sh#每个月的前十五天凌晨3点运行 00,30 \* \* \* \* bash /path/to/script.sh#在每小时的开始和中间运行 00 00,12 \* \* \* bash /path/to/script.sh#每天午夜和中午运行 00 \* 01-07 01,06 \* bash /path/to/script.sh#在1月和6月的前七天每小时开始运行 \`\`\` | |||
|  | 
 | |||
|  | 由`cron`运行的程序只有你想象的强大 可以伸展!如果您熟悉社交网络 [Twitter](https://twitter.com/)然后你可能会遇到一些Twitter 自动创建帖子的帐户 [表情符号水族馆](https://twitter.com/emojiaquarium) , [老水果图片](https://twitter.com/pomological) ,或 [无尽的尖叫](https://twitter.com/infinite_scream) 。许多这些“机器人” 帐户由`cron`提供支持,后者使用Twitter的HTTP API发布推文 经常。 |