linux通过crontab 设置定时执行脚本任务

1,首先,使用shell脚本或命令行 添加crontab 定时任务

     crontab 是运维过程中常用的定时任务执行工具,一般情况下在有新的定时任务要执行时,使用crontab -e ,将打开一个vi编辑界面,配置好后保存退出,但是在自动化运维的过程中往往需要使用shell脚本或命令自动添加定时任务。接下来结束三种(Centos)自动添加的crontab 任务的方法:

方法一:

编辑 /var/spool/cron/用户名 文件,如:

echo "* * * * * hostname >> /tmp/tmp.txt" >> /var/spool/cron/root

echo "*/10 * * * * $AGENT_HOME/service/openldap/bin/keep_sssd_alive.sh >/dev/null 2>&1" >> /var/spool/cron/root
优点:简单

缺点:需要root权限

方法二:

编辑 /etc/crontab 文件,

echo "* * * * * root hostname >> /tmp/tmp.txt" >> /etc/crontab
需要注意的是,与常用的crontab 有点不同,/etc/crontab 需指定用名。而且该文件定义为系统级定时任务 不建议添加非系统类定时任务,编辑该文件也需要root权限

方法三:

 利用crontab -l 加 crontab file 两个命令实现自动添加

crontab -l > conf && echo "* * * * * hostname >> /tmp/tmp.txt" >> conf && crontab conf && rm -f conf
由于crontab file会覆盖原有定时任务,所以使用 crontab -l 先导出原有任务到临时文件 “conf” 再追加新定时任务

优点:不限用户,任何有crontab权限的用户都能执行

缺点:稍微复杂

2,crontab中使用环境变量的方法(手动执行shell脚本可以,在定时任务中不行)

在crontab中如何引用已定义的环境变量
   一个shell脚本 /root/test/shell/test_crontab_env.sh,内部使用了一个环境变量 TEST_CRONTAB_ENV=test_crontab_env
   且TEST_CRONTAB_ENV存在于 /etc/profile 中
   如:
   #!/bin/bash
   echo "`date +%Y-%m-%d" "%H:%M:%S` $TEST_CRONTAB_ENV" >> /tmp/test_crontab_env.file
   手动执行, 运行结果:
   2010-09-04 11:23:38 test_crontab_env
   添加到 crontab 中如下
   */1 * * * * /root/test/shell/test_crontab_env.sh
   结果:
   $> cat /tmp/test_crontab_env.file
   2010-09-04 11:25:01
   2010-09-04 11:26:01
   ...
   这里引用的环境变量无效了.   

   使环境变量在crontab中生效的方法:
   1.传参的方式
     crontab中
       */1 * * * * /root/test/shell/test_crontab_env.sh "test_crontab_env"
     test_crontab_env.sh 中
       #!/bin/bash
       echo "`date +%Y-%m-%d" "%H:%M:%S` $1" >> /tmp/test_crontab_env.file
   2.在该shell脚本中定义环境变量
     test_crontab_env.sh 中
       #!/bin/bash
       TEST_CRONTAB_ENV=test_crontab_env
       echo "`date +%Y-%m-%d" "%H:%M:%S` $TEST_CRONTAB_ENV" >> /tmp/test_crontab_env.file
   3.在该shell脚本中加载环境变量文件(亲测有效)
     #!/bin/bash
     source /etc/profile
     echo "`date +%Y-%m-%d" "%H:%M:%S` $TEST_CRONTAB_ENV" >> /tmp/test_crontab_env.file

   个人觉得还是第三种方法最实用

3,LinuxShell中删除文件中某一行的方法

如果有一个abc.txt文件,内容是:
  aaa
  bbb
  ccc
  ddd
  eee
  fff
  如果要删除aaa,那么脚本可以这样写:
  sed -i '/aaa/d' abc.txt
  如果删除的是一个变量的值,假如变量是var,应该写成:
  sed -i '/'"$var"'/d' abc.txt
  至于grep -v aaa abc.txt这个方法,是无法将修改的结果写入abc.txt中去的

本人删除通过脚本删除定时任务:sed -i '/keep_sssd_alive.sh/d' /var/spool/cron/root

crontab命令概念介绍https://www.cnblogs.com/zoulongbin/p/6187238.html

猜你喜欢

转载自blog.csdn.net/seulzz/article/details/89376749