一、实验背景
I need to add a cron job thru a script I run to set up a server.
I can use crontab -e but that will open an editor to edit the current crontab.
I want to do this programmatically.
Is it possible to do so?
二、实验操作
方式一:添加任务到配置文件 /etc/crontab
# cat /etc/crontab
#####################
#!/bin/bash
CRONTAB_ FlLE="/etc/crontab"
systemctl stop ntpd.service
systemctl disable ntpd.service
/usr/bin/sed -ri '/ntpdate/d' ${CRONTAB_ FlLE}
sh -c "echo '*/30 * * * * root ntpdate xx.xx.xx.xx >/dev/null 2>&1' >> ${CRONTAB_ FlLE}"
systemctl restart crond.service
##########################
注意:
1. 使用ntpdate定时任务同步时间,不能同时启动ntpd服务
2. 使用/etc/crontab 添加定时任务,那么 使用 crontab -u root -l 无法直接显示用户的定时任务
方式二、使用 crontab crontabFile 方式添加
##################################
#!/bin/bash
myscript="/path/to/resume_backup.sh"
filePath=$(cd "$(dirname "$0")";pwd)
echo $filePath
crontab -l > cronFile
number=`grep -n "$myscript" cronFile | cut -d ":" -f 1`
line=$number
echo $line
if [ -z $line ];then
echo "该任务不存在,将添加"
echo "1 12 * * * root $myscript" >> cronFile
crontab cronFile
rm -f cronFile
else
echo "该任务已经存在,将会先删除再添加"
sed -i '/'$myscript'/d' cronFile
echo "1 12 * * * root $myscript" >> cronFile
crontab cronFile
rm -f cronFile
fi
##################################
这个脚本的大致功能就是,首先去判断任务是否已经存在,存在的话就先删除,再去添加,不存在就直接添加了。
crontab -l > cronFile 这行就是将定时任务写到一个中间文件中,方便下面对定时任务的操作
number=`grep -n "$myscript" cronFile | cut -d ":" -f 1` 这个是获得$myscript在cronFile中所在的行数
if [ -z $line ]; 判断line是否为空
echo "1 12 * * * root $myscript'' >> cronFile 将定时任务 写到 cronFile中去
crontab cronFile 将cronFile中的内容写到定时任务中去(全部覆盖)
sed -i '/'$myscript'/d' cronFile 从cronFile中删除包含$myscript的行
rm -f cronFile 删除中间文件cronFile
注:使用这种方式可用 crontab -u root -l 直接查看设置的定时任务
方式三、使用crontab 的非交互方式
# (crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/shell.sh args") | crontab -
如果脚本中设置了 set -e 那么需要 crontab -l 2>/dev/null || true
注:使用这种方式可用 crontab -u root -l 直接查看设置的定时任务
# crontab -u root -l
三、参考
脚本添加定时任务(Linux)
https://blog.csdn.net/javaweiming/article/details/8722525
How do I create a crontab through a script
https://stackoverflow.com/questions/4880290/how-do-i-create-a-crontab-through-a-script
shell中各种括号的作用()、(())、[]、[[]]、{}
https://blog.csdn.net/taiyang1987912/article/details/39551385