定时执行脚本
定时任务
#打开定时任务
crontab -e
#添加定时任务
00 00 * * * /bin/sh /usr/local/nginx/sbin/cut_nginx_logs.sh
#":wq"保存并退出
#十分钟执行一次
*/10 * * * * /bin/bash /home/share/timerSearch/timerSearchDB.sh
#查看定时任务,就会看到你添加的内容了
crontab -l
说明:
分钟 小时 日 月 星期 命令
* * * * * *
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列 表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
https://blog.csdn.net/sukangshen/article/details/78900147
https://blog.csdn.net/fangyuying128825/article/details/71600969
http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html
/etc/crontab
用例
功能:mysql 每天定时备份, 并删除7天以前的备份
#!/bin/bash
docker_name = mysql57
data_dir="/path/to/save/data/"
docker exec-it ${docker_name} mysqldump -uroot -ppasswd --all-databases > "$data_dir/data_`date +%Y%m%d`.sql"
if [ $? -ne 0 ];then
# 任务失败,发送邮件
echo -e "邮件正文" | mail -s '标题' 123456@gmail.com
exit -1
fi
find $data_dir -mtime +7 -name 'data_[1-9].sql' -exec rm -rf {} \;
参考:https://www.jianshu.com/p/be1e581acb8e
0 2 * * * sh /absolute/path/to/mysql_dumps.sh > /absolute/path/to/mysql_dumps.log 2>&1
定时查询docker的mysql数据库并保存
#!/bin/bash
#file=/home/share/timerSearch/record.txt
#crontab -uroot -e
#*/1 * * * * /bin/bash /home/share/timerSearch/timerSearchDB.sh >> /home/share/timerSearch/record.txt 2>&1
echo "===============begin========================="
echo "定时查询脚本启动了。。。"
date "+%Y-%m-%d %H:%M:%S"
docker_name=mobile_ucc_db_1
sql="use UPLUS;select id,loginName,name,password,idcard,field29 from T_USER where loginName='admin'\G;"
#docker exec -it ${docker_name} mysql -uroot -pweb123 -e $sql >> $file
docker exec -i mobile_db_1 mysql -uroot -pweb123 -e "select now();use UCCPLUS;select id,loginName,name,password,idcard,field29 from T_USER where loginName='admin'\G;" >> /home/share/timerSearch/recordDB.txt
echo ""
echo ""
报错
报错 /bin/sh^M: bad interpreter: No such file or directory 临时文件夹
原因:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)在linux中编写改脚本。
报错the input device is not a TTY
https://blog.csdn.net/u011328417/article/details/77177904
去掉命令中去掉t 错误解决
命令改为:docker exec -i 。。。。。
不执行sql原因可能是环境变量问题:
1、写成绝对路径
2、脚本添加环境变量
#!/bin/bash
. /etc/profile
. ~/.bash_profile
https://blog.csdn.net/cy309173854/article/details/53186516
/bin/sh^M: bad interpreter:没有那个文件或目录解决
因为操作系统是windows,我在windows下编辑的脚本,所以有可能有不可见字符。
脚本文件是DOS格式的, 即每一行的行尾以\n\r来标识, 其ASCII码分别是0x0D, 0x0A.
vim filename
然后用命令
:set ff? #可以看到dos或unix的字样. 如果的确是dos格式的。
然后用
:set ff=unix #把它强制为unix格式的, 然后存盘退出。
再次运行脚本。
https://blog.csdn.net/ywb201314/article/details/51909976