linux 定时任务详解
<p>习惯了使用 windows 的计划任务,使用 linux 中的 crontab 管理定时任务时很不适应。</p>
<p>
所以把基本的用法总结如下。</p>
<p>
创建一个简单的定时任务</p>
<p>
每分钟输出一次当前的时间,输出到用户家目录下的 time.log 文件中。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_222542">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">$ </code><code class="bash functions">crontab</code> <code class="bash plain">-e</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">* * * * * </code><code class="bash functions">echo</code> <code class="bash plain">`</code><code class="bash functions">date</code><code class="bash plain">` >> </code><code class="bash plain">/home/xxx/time</code><code class="bash plain">.log</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
crontab 程序的路径为 /usr/bin/crontab。</p>
<p>
每个用户的定时任务可以在 /var/spool/cron/crontabs/ 目录下查询到。</p>
<p>
需要使用root权限才能进入这个目录。每个以用户名命名的文件中记录着该用户的定时任务。</p>
<p>
注意,不要使用 vi 直接编辑这些文件。</p>
<p>
cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,但是 ubuntu 默认关闭了cron 的 log。</p>
<p>
打开的方式为:打开 rsyslog 服务的配置文件</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_578276">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash plain">vim </code><code class="bash plain">/etc/rsyslog</code><code class="bash plain">.d</code><code class="bash plain">/50-default</code><code class="bash plain">.conf</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
将下面一行中前面的注释符去掉</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_117289">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">cron</code><code class="bash plain">.* </code><code class="bash plain">/var/log/cron</code><code class="bash plain">.log</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
重启 rsyslog</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_643990">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash plain">service rsyslog restart</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
现在就可以看到 /var/log/cron 文件了,查看该文件是解决定时任务出错的重要途径。</p>
<p>
控制用户运行定时任务</p>
<p>
如果不想让某个用户运行定时任务,直接把他的账号写入到 /etc/cron.deny 文件中即可。注意,一行一个账号。</p>
<p>
当然你也可以使用 /etc/cron.allow 文件来显式的指定可以运行定时任务的用户的账号,并且 /etc/cron.allow 比 /etc/cron.deny 的优先级要高。</p>
<p>
但感觉有点乱,倒不如只使用其中的一个。</p>
<p>
<strong>crontab 命令</strong></p>
<p>
-u :只有 root 才有权限执行这个任务,也就是帮其他使用者创建/移除 crontab 定时任务</p>
<p>
-e :编辑 crontab 的内容</p>
<p>
-l :显示 crontab 的内容</p>
<p>
-r :移除所有 crontab 的内容,若仅要移除某一项,请用 -e 编辑</p>
<p>
时间格式</p>
<p>
分钟 小时 日期 月份 周 命令</p>
<p>
数字范围 0-59 0-23 1-31 1-12 0-7 echo "hello" >> abc.log</p>
<p>
特殊字符的含义</p>
<p>
*(星号) 代表任何时刻都接受。</p>
<p>
,(逗号) 代表分隔时段的意思。</p>
<p>
-(减号) 代表一段时间范围内。</p>
<p>
/n(斜线) 那个 n 代表数字,每隔 n 单位间隔。</p>
<p>
case1: 每年的五月一日 10:5 执行一次</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_205913">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">5 10 1 5 * </code><code class="bash functions">command</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
case2: 每天的三点,六点各执行一次</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_551292">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">0 3,6 * * * </code><code class="bash functions">command</code> <code class="bash comments">#注意这里使用了逗号</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
case3: 每天的8:20, 9:20,10:20,11:20各执行一次</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_491768">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">20 8-11 * * * </code><code class="bash functions">command</code> <code class="bash comments">#注意这里使用了减号</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
case4: 每五分钟执行一次</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_472232">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">*</code><code class="bash plain">/5</code> <code class="bash plain">* * * * </code><code class="bash functions">command</code> <code class="bash comments">#注意这里使用了/n</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
case5: 每周一十点执行一次</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_139203">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">* 10 * * 1 </code><code class="bash functions">command</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
配置系统级别的定时任务</p>
<p>
crontab -e 是用来设置用户级别的定时任务的。如果要设置系统级别的定时任务该怎么办呢?</p>
<p>
答案是直接使用 root 权限编辑系统级别定时任务的配置文件: /etc/crontab。</p>
<p>
比如直接用 vim 打开编辑:</p>
<p>
<img title="linux 定时任务详解" alt="linux 定时任务详解" src="https://zhuji.jb51.net/uploads/img/202305/d8430527b3a892dbfa050af6ec58877d.jpg"></p>
<p>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
原文链接:http://www.cnblogs.com/sparkdev/p/5862038.html</p>
頁:
[1]