温欣爸比

  • 主页
  • Alfred Workflow
  • 《Vim 练级手册》
  • 常用命令
  • 代码笔记
  • 合辑
  • 在线工具
所有文章 友链 关于我

温欣爸比

  • 主页
  • Alfred Workflow
  • 《Vim 练级手册》
  • 常用命令
  • 代码笔记
  • 合辑
  • 在线工具

Linux Crontab 定时任务

2018-01-15

Linux 中使用 crontab 来定时执行命令或指定脚本。

  • Hello World
  • 使用说明
    • 查看任务列表
    • 删除任务
    • 第二种方法
    • 配置文件格式
    • 更多使用实例
  • 按秒数间隔来执行
  • 服务状态
  • 参考

Hello World

先什么都不要说,跟我一起 Hello World
首先修改 ~/.bash_profile

1
export EDITOR=vim

然后执行 source ~/.bash_profile 使配置生效
随后新建一个定时任务

1
$ crontab -e

将下面的文字复制进去

1
* * * * * /bin/echo Hello World `date`\n >> ~/output
1
crontab: installing new crontab

这代表你已经创建一个定时任务,它的作用是,每分钟在 ~/output 文件中添加一行带有时间标记的字符串 Hello World,如下

1
2
3
4
5
Hello World Sun Jan 14 20:14:01 CST 2018n
Hello World Sun Jan 14 20:15:01 CST 2018n
Hello World Sun Jan 14 20:16:01 CST 2018n
Hello World Sun Jan 14 20:17:01 CST 2018n
Hello World Sun Jan 14 20:18:01 CST 2018n

你使用 tail -f ~/output 命令就可以每隔一分钟看到一行输出。

使用说明

不管你有没有成功的实现刚才的效果,现在来跟我一起看看刚才就做了些什么吧

  • crontab -e crontab 执行定时任务,需要配置任务列表,这条命令就是在编辑任务
  • export DEITOR=vim 是为了指定编辑任务时,使用的编辑器,现在绝大多数 Linux 都是用 Vim
    编辑生成的任务文件在目录 /var/spoot/cron 中(这是 CentOS 系统,如果是 Ubuntu 则是在 /var/spoot/cron/crontabs 目录中)有一个用户名命名的文件,比如 root ,剩下的操作刚才已经有所介绍,还有一些常用命令

    查看任务列表

    1
    $ crontab -l
1
* * * * * /bin/echo Hello World `date`\n >> ~/output

删除任务

1
$ crontab -r

这样刚才生成的文件就会被删除掉

第二种方法

如果你不像文件生成在这个目录中,也可以做如下操作

1
2
3
4
5
$ vim ~/roottab         # 手动生成一个配置文件

* * * * * /bin/echo Hello World `date`\n >> ~/output

$ crontab ~/roottab # 启动定时任务,并制定该文件

配置文件格式

下面来详细说说 crontab 文件格式

1
2
3
4
5
6
7
* * * * * /bin/echo Hello World `date`\n >> ~/output
|-|-|-|-|-|- 分钟 0 ~ 59
|-|-|-|-|- 小时 0 ~ 23
|-|-|-|- 日 1 ~ 31
|-|-|- 月 1 ~ 12
|-|- 周 0 ~ 7
|- 需要执行的命令

更多使用实例

1
2
3
4
5
6
7
8
9
10
# 每分钟执行一次
* * * * * /bin/echo Hello World `date`\n >> ~/output
# 每小时执行一次
* */1 * * * /bin/echo Hello World `date`\n >> ~/output
# 每小时的第3和第15分钟执行
3,15 * * * * /bin/echo Hello World `date`\n >> ~/output
# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * /bin/echo Hello World `date`\n >> ~/output
# 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 /bin/echo Hello World `date`\n >> ~/output

按秒数间隔来执行

有点需要单说一下,crontab 最小单位是按照分钟来执行的,默认是不支持按照秒数来执行的,不过我们可以想一些变通的方法,利用延时。

1
* * * * * sleep 15; /bin/echo Hello World `date`\n >> ~/output

上面的语句代表了每分钟执行任务的时候,先睡眠 15 秒在执行。

1
2
* * * * * /bin/echo Hello World `date`\n >> ~/output
* * * * * sleep 15; /bin/echo Hello World `date`\n >> ~/output

这样写的话就代表了,每分钟执行一次,每分钟推后 15 秒在执行一次,在多写几个,我们就可以得到一个每隔 15 秒执行一次的定时任务了,比如

1
2
3
4
* * * * * /bin/echo Hello World `date`\n >> ~/output
* * * * * sleep 15; /bin/echo Hello World `date`\n >> ~/output
* * * * * sleep 30; /bin/echo Hello World `date`\n >> ~/output
* * * * * sleep 45; /bin/echo Hello World `date`\n >> ~/output

唯一的缺点就是第一次执行这个定时任务的时候,前 1 分钟是轮空的。

服务状态

Ubuntu

1
2
# 启动、重启,停止、重载、运行状态
$ service cron start|restart|stop|reload|status

CentOS < 7

1
2
3
4
5
6
# 启动、重启,停止、重载、运行状态
$ service crond start|restart|stop|reload|status

$ chkconfig sshd on # 开机自启sshd
$ chkconfig sshd off # 开机关闭自启sshd
$ chkconfig --list sshd # 查看每个运行级别类型中服务的当前状态

CentOS >= 7

1
2
3
4
5
6
7
$ systemctl enable crond.service     # 开机自启crond
$ systemctl disable crond.service # 开机关闭自启crond
$ systemctl start crond.service # 启动crond
$ systemctl restart crond.service # 重启
$ systemctl stop crond.service # 停止
$ systemctl reload crond.service # 重新加载
$ systemctl status crond.service # 查看启动状态

参考

  • crontab 定时任务
最近更新
Alfred Workflow 命令行帮助工具
最近热读
Go 判断数组中是否包含某个 item
Vim 高级功能 vimgrep 全局搜索文件
办理北京工作居住证的一些细节
Go 语法错误:Non-declaration statement outside function body
Mac 电脑查看字体文件位置
扫码关注公众号,或搜索公众号“温欣爸比” 及时获取我的最新文章
赏

谢谢你请我喝咖啡

支付宝
微信
  • linux
Python f-strings 3.6 版本新增加的字符串格式化功能
Javascript input 输入限制
  1. 1. Hello World
  2. 2. 使用说明
    1. 2.1. 查看任务列表
    2. 2.2. 删除任务
    3. 2.3. 第二种方法
    4. 2.4. 配置文件格式
    5. 2.5. 更多使用实例
  3. 3. 按秒数间隔来执行
  4. 4. 服务状态
  5. 5. 参考
© 2017 - 2022 温欣爸比 京ICP备15062634号 总访问量3372次 访客数3324人次 本文总阅读量9次
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • python
  • flask
  • javascript
  • docker
  • 工具
  • openresty
  • 微信
  • java
  • hexo
  • 杂谈
  • vim
  • git
  • mysql
  • http
  • linux
  • mac
  • tmux
  • ssh
  • 算法
  • 开发
  • node
  • 杂文
  • jinja2
  • maven
  • spring
  • 北京
  • 生活
  • springboot
  • react
  • shell
  • graphql
  • iterm
  • expect
  • nginx
  • sqlalchemy
  • html
  • electron
  • vagrant
  • elastic
  • 宝贝
  • ansible
  • css
  • jquery
  • go
  • markdown
  • awk
  • redis
  • leetcode
  • zsh
  • 漫威
  • ssr
  • android
  • ffmpeg
  • chrome
  • vmware
  • youtube
  • windows
  • jupyter
  • excel
  • jq
  • Mac
  • Homebrew
  • mongo
  • py2
  • HomeBrew
  • movie
  • nodejs

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • Guru99
每天看书
每天背单词
每天一篇
写写代码
听听周杰伦
爱爱老婆