交待下背景。。。公司开发组只有技术经理有服务器和数据库权限,还只是开发环境的。。因为工作安排和权限限制,测试同学上线的时候,需要本人帮开发组的部分同事review代码并把代码提交到trunk。一开始手动diff文件review没问题后copy上传,时间久了,同事间建立了牢固的信任,非重要文件也就不需要review了。嫌麻烦写了个shell脚本(trunk.sh),把需要传的文件和comment分别放在俩文件里(fileList和comment),手动执行脚本,脚本对文件校验处理后copy到trunk目录,然后svn commit到trunk。最近开发同学频繁改动上线,测试同学拼命的向我发文件,严重影响本人的开发工作,终于让我有动力写了一个小系统。在开发服务器上弄了个登录后可以提交需要上传的文件的表单,给测试同学分配了账号密码,测试同学登录后填写文件列表和改动说明提交后过滤重要文件后保存到memcached。我在本地写了个脚本(getTask.php)用crontab定时每分钟请求开发服务器的task.php(task.php的作用是查到memcached的新任务就输出并删除此任务),getTask.php请求到新任务就把文件和coment写在之前的fileList(fileList一行写一个文件名,这里有个坑,当只有一个文件时,如果不在文件名后面加个换行,shell read line读不出来,和手动复制的diff会显示No newline at end of file)和comment,并把时间戳写在current_task_time文件里。另外一个脚本(autosvn.sh)每分钟比较current_task_time和last_task_time,如有不同就执行`cp current_task_time last_task_time`并执行trunk.sh,如果current_task_time和last_task_time相同不执行任何操作。

背景交代完毕,下面就说一下crontab 定时提交svn遇到的坑。首先是trunk.sh手动执行可以(当然,一年内都用了无数次了)。但是用crontab定时执行,收到了报错邮件。百度搜到的两个错误都让我遇到了。

1.  脚本中用了相对路径。脚本中确实为了方便用了一些相对路径。解决方法脚本中统一用绝对路径。

2. 中文乱码问题,在脚本开始加入export LANG=en_US.UTF-8。

3. crontab环境变量和手动执行运行的环境变量不一样。在脚本用加入env,发现确实输出不一样。解决办法:在定时脚本前面加入source ~/.bash_profile,这种方法很大程度上也能解决前面的两个问题。

解决了这俩问题。

发现又报了俩svn的错误

svn: E170013: Unable to connect to a repository at URL 'https://svn.*****.com:10443/******'

svn: E215004: No more credentials or we tried too many times.

Authentication failed

网上搜了很多都找不到解决办法。最后问了下大神同学说我手动执行的时候输入过账号密码并缓存了下来。crontab没有帮我输入账号密码,问我crontab是用的当前登陆用户吗,我说是啊。同学也没辙,让我搜一下svn免登录。没搜到。尝试带上--username和--password,执行成功了。我以为我终于大功告成了。。。

但是我自己要提交代码时,手动svn up竟然也要输入密码了。搞不清svn账号密码的缓存机制。猜想应该crontab执行时输入了账号密码但是没有保存密码,所以把我之前缓存的密码冲掉了。

思路进入两难的境地,定时svn脚本免密了能成功,我自己提交却要输入密码。自己输入完密码并记住后,定时脚本又记不住。。。

后来搜到了 --no-auth-cache 然后我故意svn up  --no-auth-cache 不输密码,连按三个回车.报了错。

svn: E215004: No more credentials or we tried too many times.

Authentication failed

恍然大悟,原来crontab即使和手动执行svn一样的用户,也不会此用户之前缓存的密码,而且由于无法输入账号密码,继续往下运行,所以会报svn: E215004的多次输入错误的报错。这里有俩疑惑:

第一,为啥crontab不用我缓存的密码。

第二。如何让crontab支持我手动输入密码并缓存下来(网上有用expect脚本可以替用户输入账号密码)。

最后尝试trunk.sh 里svn命令都带上--username myaccount --password mypassword 以及 --no-auth-cache,执行成功,然后手动执行svn也没再让我输入账号密码。

但我还是觉得脚本里带上svn账号密码不舒服,等有时间再好好找找如何配置svn使得crontab执行svn免登录吧。

利用crontab定时提交svn遇到的几个问题的更多相关文章

  1. Linux命令之Crontab定时任务,利用Crontab定时执行spark任务

    Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...

  2. 利用crontab定时备份数据库为sql文件

    测试: 每1分钟执行1次,利用crontab */1 * * * * /opt/nginx/db_bak.sh 每天的0点0分把数据库备份为日期格式 0 0 * * * /opt/nginx/db_b ...

  3. 利用crontab定时备份nginx访问日志(也可以说是定时切分日志)

    在我们的工作中,肯定会涉及到分析访问日志. 但是如果访问日志都集中存在于一个文件中,那数据量就太大了,并且也不利于我们进行分析. 所以我们需要对访问日志进行按时间切割. 思路: 我们可以利用linux ...

  4. 利用crontab定时重启centos

    起因 前一段买了aliyun的ecs的最低配版,大概配置是centos 7,512内存,20G空间. 部署了几个站点,虽然网站已经做了一定的静态化,但还是会出现内存不够用的情况,这个时候,系统会停掉一 ...

  5. Centos7 利用crontab定时执行任务及配置方法

    crond是什么? crond 和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 ...

  6. 利用crontab自动更新SVN代码

    shell.sh#!/bin/sh source ~/.bash_profile LANG=en_US.UTF- cd /opt/web/hzcms/ svn up >> /opt/web ...

  7. Centos7:利用crontab定时执行任务

    cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond stop /sbi ...

  8. Centos 7下利用crontab定时执行任务详解

    一 cron服务 cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond ...

  9. linux crontab定时执行

    #利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * ...

随机推荐

  1. asp.net的Request.ServerVariables参数说明

    Request.ServerVariables["SERVER_NAME"] '获取服务器IPRequest.ServerVariables["HTTP_REFERER& ...

  2. 深入理解内存映射mmap

    内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系,这篇细说一下mmap的一些要点. 修改(2015-11-12):Linux的虚拟内存管理是基于mmap来实现 ...

  3. centos7下安装docker(dockerfile常用的指令)

    FROM:指定ase镜像 MAINTAINER:设置镜像作者,可以是任意字符 COPY:将文件从build  context复制到镜像.支持两种形式:1.COPY src dest 2.COPY [“ ...

  4. Bloom Filter(布隆过滤器)如何解决缓存穿透

    本文摘抄自我的微信公众号"程序员柯南",欢迎关注!原文阅读 缓存穿透是什么? 关于缓存穿透,简单来说就是系统处理了大量不存在的数据查询.正常的使用缓存流程大致是,数据查询先进行缓存 ...

  5. Vue 部署IIS 单页面刷新报404问题

    参考地址: https://blog.csdn.net/yinjing8435/article/details/71274416

  6. Vue — 微信公众号内置h5支付相关

    首先,在公众号后台配置h5页面地址 开发流程 1.通过配置h5地址,获取code.再通过code,获取openid getOpenid(){ let url = 'https://open.weixi ...

  7. CSS3动画效果transition

    1.transition的浏览器支持情况 IE10+支持,IE6\7\8\9都不支持!目前,其他浏览器最新版本都支持,不需要再加前缀 -webkit- 之类的了 2. 还是一步一步说说怎么用trans ...

  8. vue scoped >>> & git conflict <<<<<<< HEAD

    vue scoped >>> & git conflict <<<<<<< HEAD Q: ???还有这操作 A: > > ...

  9. 起步wex5 谷歌浏览器兼容性问题,CheckBox不显示

  10. BlockQueue 解析

    生产者.消费者模式 https://www.jianshu.com/p/024a36b83099