定时任务

cron

安装

cron 通常分为三部分

  1. crond 是 cron 在系统内的守护进程,
  2. crontab 是管理 cron 任务的工具
  3. 配置文件
    • 配置文件的位置?

cron 表达式

* * * * *
分 时 日 月 星期
特别的
    @yearly 0 0 1 1 * 每年运行一次
    @monthly 0 0 1 * * 每月运行一次
    @weekly 0 0 * * 0 每星期运行一次
    @daily 0 0 * * * 每日运行一次
    @hourly 0 * * * * 每小时运行一次
            * * * * * 每分钟运行一次 这个就没有特殊的名称了
    @reboot
        将作业配置为在守护程序启动时运行一次。
        由于 cron 通常永远不会重新启动,因此这通常用于系统启动时运行的任务

cron 如何使用

常用的命令

cron 的实现

使用bash脚本实现的隔秒运行和单例运行

    * * * * * cron.sh
    #!/bin/bash
    step=1 #间隔的秒数,不能大于60
    for (( i = 0; i < 60; i=(i+step) )); do
        $(php test.php)
        sleep $step
    done
    exit 0
    要使用文件锁确保当前只有一个脚本在运行
    flock命令
    例子1
    ```
    #!/usr/bin/env bash
    LOCK_FILE=/var/lock/test.lock
    exec 99>"$LOCK_FILE"
    flock -n 99
    if [ "$?" != 0 ]; then
        echo "$0 already running"
        exit 1
    fi
    #脚本要做的其他事情
    ```
    例子2
    ```
    #!/usr/bin/env bash
    [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en  "$0"  "$0"  "$@" || :
    # 如果${FLOCKER}环境变量没有设置,则尝试将脚本本身加锁,如果加锁成功,则运行当前脚本,(并且带上原有的参数),否则的话静默退出。
    #脚本要做的其他事情

systemd 的 timer

如何创建定时器

定时器的相关命令

列出所有定时器
    systemctl list-timers
systemctl 的命令也能直接用在 定时器中
    start stop status enable disable
查看所有单元
    systemctl list-unit-files
查看所有 Service 单元
    systemctl list-unit-files --type service
查看所有 Timer 单元
    systemctl list-unit-files --type timer

和 cron 比较

Windows 的 计划任务

在 windows 下如何运行 cron

其他

Linux 的 at 和 atq

at 和 atq 通常用于一次性任务

Windows 的 at

还有哪些好用的定时任务或计划任务工具?