linux下编写一个脚本,定时从ftp服务器下载前一天的文件,进行备份到linux。
我的ftp服务器是一个windows系统,使用脚本时,先测试里面的命令是否已经能够正常运行。
小白实践成功,记录下来。
一、写脚本
1、linux服务器 /home/test1/ 下建一个download.sh
cd /home/test1
touch download.sh
2、脚本写入:
vi download.sh
#下载前一天生成的文件脚本
#!/bin/bash
wget -r -nH -P/home/test/ ftp://0.0.0.0:900/*$(date -d "1 day ago" +"%Y%m%d")* --ftp-user=root --ftp-password=123456
解释:
0.0.0.0:900 # ftp服务器的IP和对应端口。
-r参数就是用来目录下载的,递归下载
-nH不包含主机文件夹
ftp://0.0.0.0:900/*$(date -d "1 day ago" +"%Y%m%d")*
,提取ftp服务器目录下的文件。
-P 下载到指定目录,下载到linux目录/home/test1/
全量下载所有文件代码如下:
wget -r -nH -P/home/test/ ftp://0.0.0.0:900/* --ftp-user=root --ftp-password=123456
下载当天日期的文件代码如下:
wget -r -nH -P/home/test/ ftp://0.0.0.0:900/*$(date +"%Y%m%d")* --ftp-user=root --ftp-password=123456
3、/home/test目录下赋予脚本执行的权限:chmod +x download.sh
可以运行sh download.sh测试脚本
二、定时运行脚本
1、service crond status #查看crond启动状态
2、crontab -e #写入定时任务
写入:30 16 * * * /home/test1/download.sh
#每天16:40执行
3、crontab -l #查看当前任务调度
4、/sbin/service crond start #启动crond服务
4、cat /var/spool/mail/root #查看定时任务生成的日志
三、其他命令
1、ll
命令行输入ll或者ls -l查看文件的访问权限。
2、ntsysv
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
总结一下功能按钮:
上下键:可以在中间的方框当中,在各个服务之间移动;
空格键:可以用来选择你所需要的服务,[*]表示开起启动;
tab键:可以在方框、OK、Cancel之间移动;
[F1]键:可以显示该服务的说明。
3、vi ~/.bash_profile #环境变量配置
可以在家目录下查看.bash_profile里的PATH。
如果是:PATH=$PATH:$HOME/bin
则需要添加成如下:
PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin
4、yum install ftp/wget
安装命令
5、每隔30分钟root执行一次updatedb命令:
*/30 * * * * root updatedb
四、注释
1、linux drwxr-xr-x #linux文件属性,ll可以查看
d:第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道
rwx:第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行。r:可读取文件的实际内容
w:可编辑、新增、修改该文件的实际内容
x:可被执行
r-x:第5-7位表示和这个文件属主所在同一个组的用户所具有的权限。
r-x:第8-10位表示其他用户所具有的权限
2、crontab 格式
* * * * * XXX
分 时 天 月 星期 命令
取值范围:分钟 (0-59),小時(0-23),日期(1-31),月份(1-12),星期(0-6) //0代表星期天
符号 “*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
例子:
30 3 10,20 * * ls #每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls #每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls #每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls #每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
3、+%Y%m%d%H%M%S #日期格式
Test.sh命令测试:
#!bin/bash
time2=$(date +"%Y%m%d%H%M%S")
echo $time2
%Y:年份(以四位数来表示)。2019
%m:月份(以01-12来表示)。 10
%d:日期(以01-31来表示)。 23
%H:小时(以00-23来表示)。
%M:分钟(以00-59来表示)。
%S:秒(以本地的惯用法来表示)。
参 数:
%H 小时(以00-23来表示)。
%I 小时(以01-12来表示)。
%K 小时(以0-23来表示)。
%l 小时(以0-12来表示)。
%M 分钟(以00-59来表示)。
%P AM或PM。
%r 时间(含时分秒,小时以12小时AM/PM来表示)。
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)。
%T 时间(含时分秒,小时以24小时制来表示)。
%X 时间(以本地的惯用法来表示)。
%Z 市区。
%a 星期的缩写。
%A 星期的完整名称。
%b 月份英文名的缩写。 time
%B 月份的完整英文名称。
%c 日期与时间。只输入date指令也会显示同样的结果。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%j 该年中的第几天。
%m 月份(以01-12来表示)。
%U 该年中的周数。
%w 该周的天数,0代表周日,1代表周一,异词类推。
%x 日期(以本地的惯用法来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
%n 在显示时,插入新的一行。
%t 在显示时,插入tab。
MM 月份(必要)。
DD 日期(必要)。
hh 小时(必要)。
mm 分钟(必要)。
CC 年份的前两位数(选择性)。
YY 年份的后两位数(选择性)。
ss 秒(选择性)。
-d<字符串> 显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串> 根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u 显示GMT。
--help 在线帮助。