freeCodeCamp/guide/chinese/linux/some-usages-for-linux/automating-tasks/index.md

173 lines
7.4 KiB
Markdown
Raw Normal View History

---
title: Automating Tasks
localeTitle: 自动化任务
---
### 自动化任务或任务计划
Linux的一项功能专门用于Web服务器称为CRON 我们知道任何Web服务器最引人注目的功能之一就是它始终如一 开机并始终连接到互联网。这意味着我们可以指导 我们的服务器自动执行任务,无需我们输入命令 变成一个壳。执行_其他程序_最常用的_程序之一_ 常规频率称为`cron` 。我们来看看如何使用 `cron`安排一个程序运行。
`cron`程序是称为**守护进程的程序**系列的一部分。一个守护进程 是一个始终在我们的计算机后台运行的程序。第一, 让我们看看`cron`是否正在运行。我们可以获得所有正在运行的程序的列表 使用`-A`标志时使用`ps`命令:
\`\`\`{rengine ='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 / 00H
## 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`:
```
{rengine ='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:
```
{rengine ='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.
```
{rengine ='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`:
```
{rengine ='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:
```
{rengine ='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发布推文 经常。