定时执行脚本

2018/9/15 linuxshell运维定时

# 定时任务

#打开定时任务
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
2
3
4
5
6
7
8
9
10
11
12
13
说明:

分钟   小时   日   月   星期   命令
*        *      *    *     *       *

第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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 用例

功能: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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

定时查询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 "" 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 报错

报错 /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
	
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
最近更新: 2022-06-17 15:02:30