在Linux服务器上的文件会有3个时间戳信息 访问时间(Access)、修改时间(Modify)、改变时间(Change),都是存放在该文件的Inode里面

问题描述:

  公司网站是前后端分离的,所有的静态页面全部都需要单独部署,使用的是云服务。部署方式是通过 jenkins 从指定的 SVN 地址把 前端静态页面检出到 jenkins服务器,且每次检出的代码前都会把上一次的全部删除掉,也就是在检出代码的时候所有的文件都是重新创建的,时间戳每次都是当前系统的时间;由于公司出口带宽比较小,为了提高传输效率,会在Jenkins服务器上先把源代码(tar)压缩后再上传到云服务器解压后部署。再部署的过程中从Jenkins控制台看到在云服务器对代码解压缩的时候提示 “tar: xxx: time stamp 2017-09-03 08:32:34 is 444.030325759 s in the future” 大概意思就是文件的时间戳信息异常

问题分析:

  tar命令在打包文件的时候会包含文件的所有属性,如时间戳、文件名、大小等等,根据 tar 命令报错的信息,tar命令在解压提取原来文件时间戳准备创建文件的时候遇到 Jenkins服务器时间 比 云服务器时间要新(in the future),就报了上面的错误。

解决办法:

方案一:

  1、所有服务器 用定时任务每个几分钟就同步同一个国内公开时间服务器(ntp1.aliyun.com 国内阿里云的,或其他的都行),或者直接搭建时间同步服务器(NTP)

方案二:(推荐)

  2、tar命令在解压的时候加上 -m 参数,作用是不提取压缩包里文件的修改时间,以当前系统时间为准创建时间戳。

提示:所有服务器时间应该需要一致的,不然其他服务也有可能出现时间的问题。最好是这2种方案都使用。

报错复现:

[root@localhost home]# date
Sun Sep :: CST
[root@localhost home]# touch {..}.log
[root@localhost home]# ll
total
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
[root@localhost home]# tar zcf home.tar.gz *
[root@localhost home]# rm -f *.log
[root@localhost home]# date -s "20170903 08:25:00"
Sun Sep :: CST
[root@localhost home]# tar xf home.tar.gz
tar: .log: time stamp -- :: is 444.030325759 s in the future
tar: .log: time stamp -- :: is 444.029975178 s in the future
tar: .log: time stamp -- :: is 444.029878161 s in the future
tar: .log: time stamp -- :: is 444.029821403 s in the future
tar: .log: time stamp -- :: is 444.029553439 s in the future
[root@localhost home]# ll
total
-rw-r--r--. root root Sep .log # 虽然时间戳有问题,但还是解压了,不确定会不会有其他问题
-rw-r--r--. root root Sep .log
-rw-r--r--. root root Sep .log
-rw-r--r--. root root Sep .log
-rw-r--r--. root root Sep .log
-rw-r--r--. root root Sep home.tar.gz
[root@localhost home]# stat .log
File: `.log'
Size: Blocks: IO Block: regular empty file
Device: 802h/2050d Inode: Links:
Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root)
Access: -- ::09.967538065 +
Modify: -- ::34.000000000 +
Change: -- ::09.967999958 +
[root@localhost home]# rm -f *.log
[root@localhost home]# ll
total
-rw-r--r--. root root Sep home.tar.gz
[root@localhost home]# tar mxf home.tar.gz # 加上 -m 参数后没有报错,且时间是当前系统时间
[root@localhost home]# ll
total
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep : .log
-rw-r--r--. root root Sep home.tar.gz
[root@localhost home]# stat .log
File: `.log'
Size: Blocks: IO Block: regular empty file
Device: 802h/2050d Inode: Links:
Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root)
Access: -- ::05.388000347 +
Modify: -- ::05.388000347 +
Change: -- ::05.388000347 +

[root@localhost home]# tar --help|fgrep 'touch'
-m, --touch don't extract file modified time

 

Linux tar命令解压时提示时间戳异常的处理办法的更多相关文章

  1. tar命令解压时如何去除目录结构及其解压到指定目录 (--strip-components N)

    去除目录结构加上 --strip-components N 如: 压缩文件eg.tar 中文件信息为 src/src/src/eg.txt 运行 tar -xvf eg.tar --strip-com ...

  2. [转载] linux下tar命令解压到指定的目录

    参考 http://blog.sina.com.cn/s/blog_62449fcf0100nfar.html linux下tar命令解压到指定的目录 :   #tar zxvf /bbs.tar.z ...

  3. linux下tar命令解压到指定的目录

    linux下tar命令解压到指定的目录 : #tar zxvf xx.tar.gz -C /xx//把根目录下的xx.tar.gz解压到/xx/下,前提要保证存在/xx这个目录 这个和cp命令有点不同 ...

  4. 使用tar命令解压的时候报错not in gzip format

    使用tar命令解压一个xx.tar.gz压缩包的时候报错not in gzip format,后用file xx.tar.gz查看一下格式发现是html document text格式的...

  5. linux tar文件解压

    把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个, ...

  6. tar命令-解压和压缩文件

    tar命令 可以用来压缩打包单文件.多个文件.单个目录.多个目录. Linux打包命令_tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包 tar ...

  7. tar命令: 解压到指定的目录, 解压并删除原tar文件

    -f: 置顶文件名, 后面不能再跟其他选项字母了,必须是文件名, 但是再在这个后面又可以跟 -? 选项: -C: 指定解压到的目的目录 不是-c, 小写的-c是创建. -p保留原来文件的属性. tar ...

  8. linux tar压缩解压命令的详细解释

    tar [-cxtzjvfpPN] 文件与目录 参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!特别注意 ...

  9. linux tar 压缩解压命令

    tar命令: -c 压缩-x 解压缩-t 不解压的情况下查看文件内容-r 向压缩文件追加文件-u 更新压缩文件 以上参数必须和'-f'参数连用,且'-f'必须为最后一个参数,后接文档名 -z 对应gz ...

随机推荐

  1. 04-numpy读取本地数据和索引

    1.numpy读取数据 CSV:Comma-Separated Value,逗号分隔值文件 显示:表格状态 源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录 由于csv便于展示,读取和 ...

  2. Spring只定义接口自动代理接口实现类

    能够扫描到包 @ComponentScan("org.zxp.esclientrhl") ESCRegistrar类主要实现ImportBeanDefinitionRegistra ...

  3. ArcGIS Server10.1 动态图层服务

    动态图层的应用场景: 1 改变现有图层:符号,渲染方式和版本,这些都可以通过客户端请求的时候给定相应的参数来进行设置,从而来达到轻易改变地图的效果. 2 添加地图服务中没有的图层 添加的数据可以是矢量 ...

  4. Linux上编译安装PHP

    这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...

  5. Webstorm轻松部署项目至服务器

    wo大前端在开发环境下,需要将项目部署到测试环境,webstorm进行基础配置操作就可实现. 一.在Deployment选项下配置远程服务器地址 点击加号,选择type类型,Name自己填,帮你找到这 ...

  6. 从零开始的vue学习笔记(四)

    组件注册 组件名 Vue.component('my-component-name', { /* ... */ }) 这里的my-component-name就是组件名,组件名的取法可以参考指南 ke ...

  7. 【SQL】sql统计不同类别的不同状态的数目

    例子:某主机下有5149个设备,设备分不同类别,设备运行会有不同状态(1-正常.2-告警.3-故障.0-离线) sql: SELECT t.DEVICE_TYPE_NAME,SUM(CASE t.DE ...

  8. Web开发小贴士 -- 全面了解Cookie

    一.Cookie的出现 浏览器和服务器之间的通信少不了HTTP协议,但是因为HTTP协议是无状态的,所以服务器并不知道上一次浏览器做了什么样的操作,这样严重阻碍了交互式Web应用程序的实现. 针对上述 ...

  9. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家  叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...

  10. C--二分搜索

    //二分搜索 //时间复杂度小 log2 n int search(int key, int a[], int len) { ; ; ; int mid; while(left<right) { ...