crontab 备份crontab任务

7 篇文章 1 订阅
4 篇文章 0 订阅

crontab 备份crontab任务

背景

很多时候crontab操作误删,或者其他原因导致crontab执行脚本丢失,需要对crontab任务进行备份。

先简介一下crontab命令man crontab
在这里插入图片描述

crontab -l 列举 crontab 的任务
crontab -e 编辑 crontab 的任务
crontab -r 删除crontab 的任务;风险
crontab -h crontab 的帮助
crontab -i 删除 crontab 前进行提示
crontab -u 选择crontab 用户

防止crontab 任务被删的方式

策略1:每天备份

  1. 单机单用户备份
    备份脚本 crontab_schedule_bak.sh
#!/bin/bash
crontab -l > ~/crontab_bak/cron_schedule_`date '+%Y%m%d'`.bak

增加调度crontab -e

00 00 * * /bin/bash ~/crontab_bak/crontab_bak.sh
  1. 单机多用户备份
    备份脚本 crontab_schedule_bak.sh
#!/bin/bash
# 目录与文件
cron_schedule_bak_file_name=/opt/shell_scripts/cron_schedule_bak_data/cron_schedule_`date '+%Y%m%d'`.bak
# 初始化
echo '' > $cron_schedule_bak_file_name
# 写入备份数据
grep -vE "nologin|false" /etc/passwd | cut -d: -f1 | xargs -I {} sudo sh -c "echo 'Username: {}' && crontab -u {} -l" ' >> $cron_schedule_bak_file_name

## grep cut 可替换成 cat awk 如下
# sudo cat /etc/passwd | awk -F: '{if($7!="/sbin/nologin" && $7!="/usr/sbin/nologin") print $1;}' | xargs -I {} sudo sh -c "echo 'Username: {}' && crontab -u {} -l" >> $cron_schedule_bak_file_name

修改脚本 chmod 744 crontab_schedule_bak.sh
增加调度crontab -e

# 需root用户
00 00 * * nohup /opt/shell_scripts/crontab_schedule_bak.sh > /opt/shell_scripts/crontab_schedule_bak_datea/$(date +\%Y-\%m-\%d)_crontab_schedule_bak.log 2>&1 &
  1. 多机多用户备份
    备份脚本 crontab_schedule_bak.sh
#!/bin/bash
# 目录与文件
cron_schedule_bak_file_name=/opt/shell_scripts/cron_schedule_bak_data/cron_schedule_`date '+%Y%m%d'`.bak
# host list,需root用户,同时需免密登录
host_list=(cron01 cron02 cron03 cron04)

# 初始化
echo '' > $cron_schedule_bak_file_name

for host_addr in ${host_list[@]}
do
	seg_str="==== $host_addr   ===="
        echo $seg_str
        echo $seg_str >> $cron_schedule_bak_file_name
        
	ssh $host_addr 'grep -vE "nologin|false" /etc/passwd | cut -d: -f1 | xargs -I {} sudo sh -c "echo \\'Username: {}\\' && crontab -u {} -l" ' >> $cron_schedule_bak_file_name

done

修改脚本 chmod 744 crontab_schedule_bak.sh
增加调度crontab -e

00 00 * * nohup /opt/shell_scripts/crontab_schedule_bak.sh > /opt/shell_scripts/crontab_schedule_bak_datea/$(date +\%Y-\%m-\%d)_crontab_schedule_bak.log 2>&1 &

策略2:操作crontab -e / -r / -i 备份

每次操作 crontab -e / -r / -i 时,备份文件
步骤:

  1. 创建自动以的cron脚本,
  2. 替换crontab 命令,指向自定义脚本
  1. 创建 cron.sh脚本,vi /usr/bin/cron.sh
#!/bin/bash

source ~/.bashrc
etime=`date -d "0 days ago" +%Y%m%d_%H%M%S`

# 禁用 -r
if [ "$1" = "-r" ] ; then
    echo "delete disable..."
    echo "Exit..."
    exit 2
fi

if [ "$1" = "-l" ] ; then
    /usr/bin/crontab -l
    exit 0
fi

if [ "$1" = "-e" ] ; then
	# 每次编辑都备份cron列表到~/cronbak目录下面 ,可以对目录进行判断
	if [ ! -d "~/cron_bak"];then
		mkdir -p  ~/cron_bak
	fi
    /usr/bin/crontab -l  >  ~/cron_bak/cron.bak.$etime.a
    /usr/bin/crontab -e
    /usr/bin/crontab -l  >  ~/cron_bak/cron.bak.$etime.b
fi
  1. 赋权 chmod 755 cron.sh
  2. 在/etc/bashrc文件末尾添加 alias crontab='/usr/bin/cron.sh'
    或者在当前root用户下在~/.bashrc文件末尾添加:alias crontab='/usr/bin/cron.sh'

其他防止删除方案

Linux禁止普通用户使用crontab命令
cron计划任务默认root用户与非root用户都可以执行,当然如果在安全方面想禁用这部分用户,则可以> 通过两个文件来解决:
cron.allow:定义允许使用crontab命令的用户
cron.deny:定义拒绝使用crontab命令的用户

这两个文件有优先级,普通用户在执行crontab命令的时候

  1. 系统先检测cron.allow文件是否存在;如果存在,则检测文件中存在的用户中是否有当前用户,检测通过则开始执行,检测不通过直接提示该用户没有执行权限
  2. 当系统没有检测到cron.allow文件存在的时候,则接下来检测cron.deny文件,看当前用户是否被deny掉,如果没有在cron.deny文件中检测到当前运行crontab的用户,则该命令可以成功执行,如果有检测到该用户在cron.deny文件中,则直接提示该用户没有执行权限

    案例1:只允许root和www用户执行crontab命令,其他用户则禁止执行
    在需要定义该策略的主机上面执行:
    echo “www” > /etc/cron.allow
    案例2:只拒绝anonymous用户执行crontab命令,其他用户都可以执行该命令:
    rm -f /etc/cron.allow
    echo “anonymous” > /etc/cron.deny

参考

  1. https://blog.csdn.net/zhao_teng/article/details/112526776
  2. https://www.cnblogs.com/chenxuf/p/9016359.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值