交待下背景。。。公司开发组只有技术经理有服务器和数据库权限,还只是开发环境的。。因为工作安排和权限限制,测试同学上线的时候,需要本人帮开发组的部分同事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. 阿里云OCR图片转换成文字识别调用

    using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using S ...

  2. Oracle 安装步骤、安装中错误处理、完整卸载

    /*************************************************以下ORACLE服务端安装************************************* ...

  3. zabbix-agent(zabbix-proxy)配置

    PidFile=/var/run/zabbix/zabbix_agentd.pidLogFile=/var/log/zabbix/zabbix_agentd.logLogFileSize=30Serv ...

  4. 通过getResourceAsStream 获得Properties文件属性和属性值

    1.Class.getResourceAsStream(String path) path:不以‘/’开头默认是从此类所在的包下取资源:以'/'开头则是从ClassPath根目录下获取 2.Class ...

  5. MySQL Connector/C++ 8.0 源码编译

    平台 ubuntu 16.04 参考文档: https://dev.mysql.com/doc/dev/connector-cpp/8.0/building.html 下载源码 访问 https:// ...

  6. Bootstrap起步

    Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. Bootstrap 插件全部依赖 jQuery 请注意,Bootstrap 的所 ...

  7. openstack 5大组件之间的关系和基本架构思维导图

    云计算是一种按使用量付费的模式,这种模式提供可用的/便捷的/按需的网络访问,进入可配置的计算资源共享池(资源包括网络/服务器/存储/应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作或与 ...

  8. JMC监控(Windows上远程连接监控Linux服务器的JVM)

    Windows上远程连接监控Linux服务器的JVM:1.Linux服务器上配置:在Tomcat的tomcat-wms/bin/catalina.sh中添加CATALINA_OPTS="-X ...

  9. 通俗理解ZooKeeper是如何保证数据一致性的

    https://blog.csdn.net/liuhaiabc/article/details/70771322 https://blog.csdn.net/zhaoyangjian724/artic ...

  10. Spring-webflow基础讲解

    什么是webflow: Spring Web Flow构建于Spring MVC之上,允许实现Web应用程序的“流程”.流程封装了一系列步骤,指导用户执行某些业务任务.它跨越多个HTTP请求,具有状态 ...