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