Marco Nie - crontab https://blog.niekun.net/tag/crontab/ VPS 自动备份脚本 https://blog.niekun.net/archives/466.html 2019-11-08T13:43:44+08:00 此脚本转载自 秋水逸冰 博客:https://teddysun.com/469.html需要用到的工具:LinuxMySQLopensslgdrivecrontab脚本实现定时自动备份数据库及指定目录文件夹,备份文件加密处理,自动上传到google drive。可设定备份文件保留天数。脚本下载,设定权限:wget --no-check-certificate https://github.com/teddysun/across/raw/master/backup.sh chmod +x backup.sh修改脚本配置 具体参考:https://teddysun.com/469.html安装 openssl 参考:https://niekun.net/index.php/archives/449.html安装 gdrive 参考:https://niekun.net/index.php/archives/460.html设置 crontab 定时 参考:https://niekun.net/index.php/archives/461.html 使用 crontab 设置 Linux 定时任务 https://blog.niekun.net/archives/461.html 2019-11-08T11:49:00+08:00 crontab 是 Linux 的一个执行定时任务的程序。当前用户配置 crontab 配置情况:crontab -l 编辑用户配置文件:crontab -e 以上命令是将设置写入用户级配置文件,以下方法可以直接修改系统级配置。system wide 配置文件地址:/etc/crontab配置文件文件格式:SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/root 30 1 * * * root bash /root/backup.sh前几个设置是 corn 执行环境设置,尤其是 PATH 和 HOME 需要正确设置才能保证部分命令正确执行。# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 30 1 * * * root bash /root/backup.sh以上指令代表每天 1:30 执行脚本。每个字段的写法可以有多种类型:单一数字 数字段 数字组 数字间隔单一数字,指定时间点运行:30 1 * * * root bash /root/backup.sh 数字段,指定时间段运行:30 1-6 * * * root bash /root/backup.sh 数字组,指定多个时间点运行:30 1,3,5 * * * root bash /root/backup.sh 数字间隔,指定每隔多少时间执行:*/30 * * * * root bash /root/backup.sh 0 */3 * * * root bash /root/backup.sh 加载环境变量:默认情况下,crontab 里的定时任务不能调用 .bashrc 或者在其他自定义 env 文件中定义的环境变量,导致脚本手动执行的时候没问题,自动定时运行就会出错。解决方法就是在 crontab 文件中定义环境变量,或者指定加载某个环境变量文件即可。方法一:在定时任务中直接定义环境变量* * * * * root LEARNING_FROM=baeldung LANG=es_US bash /etc/test.sh方法二:通过 bash -l -c 以 login shell 方式运行脚本,这样会运行时自动加载 /etc/profile, ~/.bash_pofile, ~/.bash_login, ~/.profile 这几个配置文件* * * * * root bash -l -c /etc/test.sh注意以上方法依然没有加载 ~/.bashrc 文件,如果需要加载这个文件则需要通过 BASH_ENV 加载:* * * * * root BASH_ENV=~/.bashrc bash -l -c /etc/test.sh以上指令就相当于加载了所有的系统级初始化配置文件了。方法三:通过 BASH_ENV 加载自定义环境变量文件* * * * * root BASH_ENV=/etc/env_addon bash /etc/test.shenv_addon 中是一些自定义的环境变量,如:ENV1=abcd ENV2=5678参考链接:How to Load Environment Variables in a Cron Job