1. 如何创建一个定时任务,通过systemd系统

Linux中,可以使用crontab创建一个定时任务。

首先,创建一个crontab文件,形如

# 每天的6点42分,运行一次spmake脚本
42 6 * * * /home/luzj/bin/spmake

紧接着,执行crontab file即可安装该文件。之后定时任务即开起

使用crontab -l列出所有在crontab管理下的定时任务,crontab -r xxx删除定时任务

1.1. systemd中的timer

systemd通过定义一个timer单元来创建一个定时任务。实际上我们需要做两件事,首先定义一个service单元,

这个service单元定义了我们想定时执行的任务。然后再定义一个timer单元,通过timer单元定义如何定时执行

之前的service单元,比如每1h执行一次、每天5点执行、每个月的16号6点执行等等

1.2. 自定义定时任务

我们自定义一个定时任务——每过30s就向msg.txt输入当前时间

1.2.1. 具体步骤

首先,创建一个mail.sh脚本.

vim mail.sh

# 内容
#!/bin/bash
echo `date` >> msg.txt #添加执行权限
chmod +x mail.sh

我们先执行一遍,bash mail.sh,就会看到当前时间被写入msg.txt之中了

创建Service单元.进入/etc/systemd/system目录中,创建mytimer.service文件,

vim mytimer.service

#写入内容
[Unit]
Description=mytimer service [Service]
ExecStart=/bin/bash <path>/mail.sh # 这里可以不添加[Install]区块,因为该Service是为Timer单元服务的

之后,启动Service单元,systemctl start mytimer.service.然后就会看到,当前时间

被写入到msg.txt之中了

创建Timer单元.同样的目录,创建mytimer.timer文件,

vim mytimer.timer

#内容如下
[Unit]
Description=run mail.sh every 10s [Timer]
OnUnitActiveSec=10s
Unit=mytimer.service [Install]
WantedBy=multi-user.target

启动Timer单元.

systemctl daemon.reload
systemctl enable mytimer.timer
systemctl start mytimer.timer #查看timer运行状态
systemctl status mytimer.timer
tail -f msg.txt # 查看打印情况,每10s会打印一次,我的实测 时间间隔不是很精确哈
journalctl -f -u mytimer.timer # 查看定时器运行日志

1.2.2. [Timer]区块属性详情

OnActiveSec:定时器生效后,多少时间开始执行任务
OnBootSec:系统启动后,多少时间开始执行任务
OnStartupSec:Systemd 进程启动后,多少时间开始执行任务
OnUnitActiveSec:该单元上次执行后,等多少时间再次执行
OnUnitInactiveSec: 定时器上次关闭后多少时间,再次执行
OnCalendar:基于绝对时间,而不是相对时间执行
AccuracySec:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒
Unit:真正要执行的任务,默认是同名的带有.service后缀的单元
Persistent:如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元
WakeSystem:如果系统休眠,是否自动唤醒系统

具体可以看官方文档

1.3. 删除定时器

systemctl disable mytimer.timer #关闭开机启动(即删除目录链接)
systemctl stop mytimer.timer # 关闭单元
systemctl stop mytimer.service #之后删除timer 和Service文件 systemctl daemon-reload # 重新加载配置

参考

Systemd 定时器教程-阮一峰

最新文章

  1. [Android]使用Dagger 2依赖注入 - 自定义Scope(翻译)
  2. Django之Model操作
  3. Shell 字符串的截取
  4. Nginx内置变量
  5. 攻城狮在路上(壹) Hibernate(六)--- 通过Hibernate操纵对象(上)
  6. 解决eclipse中出现Resource is out of sync with the file system问题
  7. Redis VS Memcached 转载
  8. eclipse&#39;s code assist
  9. NODEJS环境搭建 第一篇 安装和部署NODEJS
  10. 在线OJ的小demo
  11. MIP 组件库升级公告
  12. [转载]使用QTP测试Windows对象
  13. 解决RAID重启后自动更名为md127
  14. 广播消费:允许一个 Group ID 所标识的所有 Consumer 都会各自消费某条消息一次。
  15. Python 人工智能之人脸识别 face_recognition 模块安装
  16. 手机开发-IOS
  17. Java大话设计模式
  18. windows上SVN图标不显示
  19. html5 css选择器 井号, 句点的区别
  20. 浅析中国剩余定理(从CRT到EXCRT))

热门文章

  1. 关于使用ajax上传图片问题
  2. js 显示 base64编码 的二进制流 图片
  3. vs2013 c# 中调用 c 编写的dll出错的可能错误
  4. SQL Server -&gt;&gt; PERCENTILE_CONT、PERCENTILE_DISC 和 PERCENT_RANK 函数
  5. Linux -&gt;&gt; UBuntu 14.04 LTE下安装Hadoop 1.2.1(伪分布模式)
  6. July 09th 2017 Week 28th Sunday
  7. webpack学习(三)html-webpack-plugin插件
  8. ThinkPHP最新版本SQL注入漏洞
  9. 关于Jsp页面的jstl标签的级联属性的异常。
  10. UVa 10003 - Cutting Sticks(区间DP)