交待下背景。。。公司开发组只有技术经理有服务器和数据库权限,还只是开发环境的。。因为工作安排和权限限制,测试同学上线的时候,需要本人帮开发组的部分同事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. ANT与SVN集成

    需求描述:从SVN服务器检出最新代码,编译,打包,发布测试环境. 解决方案:使用ANT官网提供的扩展工具中的svnant检出代码. 环境介绍: 操作系统:windows 7 64bit ant版本:a ...

  3. U盘启动盘安装Windows10操作系统详解

    没有装过系统的同学,总以为装系统很神秘?是专业技术人员干的事情.今天我们来看看怎么借助常用的U盘装上全新的win10系统. 准备材料: 软件软碟通,可上官网下载:https://cn.ultraiso ...

  4. Proverbs(谚语)

    Proverbs(谚语) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:English 1. Every man is the maste ...

  5. FLIR 相机采集程序

    https://www.ptgrey.com/Downloads/GetSecureDownloadItem/11048 Grasshopper3 4.1 MP Mono USB3 Vision (C ...

  6. WordPress博客搭建与问题总结

      一.WordPress博客搭建 1.安装Apache web服务器 yum install -y httpd systemctl restart httpd systemctl enable ht ...

  7. iptables之语法

    一iptables概念 防火墙分类 分为硬件防火墙和软件防火墙 硬件防火墙一般放在外网的最前面,公司的拓扑的最外面 iptables虽然称为防火墙,但是不能当做整个公司的出口防火墙,和动戈几千万,几百 ...

  8. SQL进阶随笔--case用法(一)

    SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...

  9. Django ORM多表操作

    多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对 ...

  10. kettle变量(param命名参数2)

    接arg参数: 通过命令行进行变量赋值和引用 定义跟界面定义相同: 赋值(转换): 运行命令到kettle目录下 pan /file:path "/param:aa="bb&quo ...