用户安祥 發表於 2024-1-31 00:00:00

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">` &gt;&gt; </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" &gt;&gt; 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]
查看完整版本: linux 定时任务详解