定时任务

crontab 用法

常用命令如下

1
2
3
4
crobtab crontab_info # 录入定时任务,只执行这个不会生效
crontab -e # 编辑定时任务,保存退出后会展示 crontab: installing new crontab 即为成功
crontab -l # 列出定时任务,可以根据这个判断是否有定时任务
crontab -r # 移除定时任务(所有)

crontab 的格式参考这个资料

例子

想要使用定时执行 shell 脚本,可以把定时任务写在 txt 然后再录入系统

新建一个文件为 crontab_info.txt,录入以下信息

1
2
3
# 这个是注释
# 表示 2 月 7 号早上 8 点 30 分执行 abc.sh,并把信息录入 abc.log
30 08 7 2 * abc.sh >> abc.log

第一个坑

只录入是不会生效的,录入完之后需要编辑下,然后保存退出后展示 crontab: installing new crontab 才会成功

第二个坑

  • 如果是 Mac:shell 脚本开头必须写上 source /etc/profile 才会成功
  • 如果是 Linux:shell 脚本开头必须写上以下代码

    1
    2
    #!/bin/sh
    . /etc/profile

第三个坑

相对路径的问题。

  1. shell 脚本中访问的一切数据都要注意路径问题,如先 cd 到对应的目录以及指明 node 的绝对路径

    1
    2
    3
    4
    5
    #!/bin/sh
    . /etc/profile

    cd /home/ubuntu/Norcy/LeanCloud_Backup # 先 cd
    /usr/local/bin/node auto_backup.mjs # 使用 /usr/local/bin/node 而不是 node
  2. crontab_info.txt 中要注意使用绝对路径

    1
    0 3 * * * timer.sh >> timer.log # 不生效,因为没加 /bin/sh;timer.sh 和 timer.log 的路径都是在 ~
    1
    0 3 * * * /bin/sh /home/ubuntu/Norcy/LeanCloud_Backup/timer.sh >> /home/ubuntu/Norcy/LeanCloud_Backup/timer.log # 建议使用绝对路径

第四个坑

使用 crontab -e 如何将编辑器从 nano 改为 vim

1
2
3
export VISUAL=vim
# or
export EDITOR=vim
  1. crontab 用法
  2. 例子
    1. 第一个坑
    2. 第二个坑
    3. 第三个坑
    4. 第四个坑