说明:
之前有写过一篇文章,别名alias禁止crontab -r清空定时任务。但这有个问题,按照这个做完后,crontab只对crontab -r,-l,-e有反应。如果我想使用crontab -u 用户查看用户的定时任务,crontab直接没反应。
因为更新了这个加强版的safecron.sh。
脚本:
#!/bin/sh # remove -r function from crontab # carl20150513 1st #PATH if [[ "$*" =~ "-r" ]] ; then echo "My God! Dangerous..." echo "Exit..." exit 2 else /usr/bin/crontab $* exit 0 fi
解释:
通过$*判断crontab参数里是否包含-r参数,如果有就退出。
没有,就执行crontab所有参数
附录:
附录1.Shell传入参数的处理$*,$@和$#的说明
有脚本test.sh 传入3个参数 1 2 3
运行test.sh 1 2 3后
$*为”1 2 3″(一起被引号包住)
$@为”1″ “2” “3”(分别被包住)
$#为3(参数数量)
附录2. 自动化脚本,只需保存以下内容为safecron.sh,然后sh safecron.sh执行后,退出重新登陆即可!
#!/bin/bash # Program: # frobidden crontab -r # History: # 2015/05/13 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 # remove -r function from crontab # carl20150513 1st #PATH if [[ "\$*" =~ "-r" ]] ; then echo "My God! Dangerous..." echo "Exit..." exit 2 else /usr/bin/crontab \$* exit 0 fi EOF chmod +x /usr/bin/cron.sh echo "alias crontab='/usr/bin/cron.sh'" >> /etc/bashrc