别名alias禁止crontab -r清空定时任务

说明:
crontab选项-e是修改,-r则是直接删除用户定时任务计划任务,而且没有提示,直接删除!!!。蛋疼的是-e -r 2个参数在键盘上的位置非常接近。经常容易不小心就删除了。
本文通过建立crontab的别名,即alias,实现当检测到用户输入crontab时调用/usr/bin/cron.sh来判断用户操作从而避免误删除

实现:
1.新建shell

# vim /usr/bin/cron.sh,内容如下
#!/bin/sh  
source /etc/profile;  
source ~/.bash_profile; 
  
etime=`date -d "0 days ago" +%Y%m%d_%H%M%S`  
  
if [ "$1" = "-r" ] ; then  
    echo "My God! Dangerous..."  
    echo "Exit..."  
    exit 2  
fi  
  
if [ "$1" = "-l" ] ; then  
    /usr/bin/crontab -l  
    exit 0  
fi  
  
if [ "$1" = "-e" ] ; then  
    mkdir -p  ~/cronbak  
    /usr/bin/crontab -l  >  ~/cronbak/cron.bak.$etime.a  
    /usr/bin/crontab -e  
    /usr/bin/crontab -l  >  ~/cronbak/cron.bak.$etime.b  
fi 

 
2.给刚刚那sh添加执行权限,不然你crontab -l之类的时候会提示。。。permission等。

# chmod +x /usr/bin/cron.sh

 
3.在/etc/bashrc末尾添加

alias crontab='/usr/bin/cron.sh' 

 
然后退出当前窗口再重新登录,
就可以实现,禁止crontab –r以及以后每次编辑都备份cron列表到~/cronbak目录下面

附录:
附录1.写了个自动化脚本,执行一下shell即可实现安全的crontab。如果需要每次crontab -er操作前备份原来文件的,只需要把if [ “\$1” = “-e” ] ; then这段修改成上面对应内容即可!

#!/bin/bash
# Program:
#      frobidden crontab -r 
# History:
# 2014/02/24    guo   First release
#PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
#export PATH

cat << EOF > /usr/bin/cron.sh
#!/bin/sh  

if [ "\$1" = "-r" ] ; then
    echo "My God! Dangerous..."  
    echo "Exit..."  
    exit 2
fi

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

if [ "\$1" = "-e" ] ; then
    /usr/bin/crontab -e
fi
EOF

chmod +x /usr/bin//cron.sh

echo "alias crontab='/usr/bin/cron.sh'" >> /etc/bashrc

发表评论

邮箱地址不会被公开。 必填项已用*标注