2016-04-21 113 views
0

所以,最近两天发生在我身上。我试图在SaltStack和一个非常简单的bash脚本的帮助下建立一个Subversion版本库。执行一个bash脚本并手动执行它有什么区别吗?

什么盐做这件事情是非常简单的,它只是移动10-subversion.conf从主到/root/的仆从(从)并安装neded包,如subversionhttpdmod_dav_svn

后这一切发生时,下一个脚本运行:

#!/bin/bash 

mv -f /root/10-subversion.conf /etc/httpd/conf.modules.d/10-subversion.conf 
mkdir /var/www/svn 
svnadmin create /var/www/svn/repo 
chown -R apache.apache /var/www/svn/repo 
chcon -R -t httpd_sys_content_t /var/www/svn/repo 
chcon -R -t httpd_sys_rw_content_t /var/www/svn/repo 
systemctl restart httpd 
mkdir /mnt/logs 
touch /mnt/logs/log 
svn checkout http://localhost/svn/repo 
svn checkout http://localhost/svn/repo /mnt/logs/ 

在那之后,我得到一个错误与不能够加载svn的。

svn: E175002: Unable to connect to a repository at URL 'http://localhost/svn/repo' 
XML parse error at line 1: no element found (http://localhost/svn/repo) 

这里奇怪的事情,这就是问题的原因是,如果我单独运行的每一个命令(我从字面上脚本复制粘贴&到CLI)的作品。

那么,Subversion是不是随机失败,还是在执行脚本和手动执行之间存在实际差异?

编辑:

不知怎的,我试图通过复制&从脚本粘贴命令再次做到这一点,它失败了。然后我意识到,在测试时,我曾经用编辑器手动修改10-subversion.conf,但现在我正在移动它,所以我恢复了快照,再次手动编辑文件并工作。移动时,我检查权限和文件的所有权,并在编辑时,两者是相同的(如下):

-rw-r--r--. 1 root root 120 abr 10 09:18 /etc/httpd/conf.modules.d/10-subversion.conf 
+0

您如何运行脚本?什么是执行错误? – 123

+0

这个脚本是通过'cmd.script'的SaltStack运行的,我在问题 – sysfiend

+0

上发布错误应该是一样的。但Exec上下文可能不同。在某个时候,PATH或HOME没有设置。 Ptty也可以修改行为。该脚本是否与同一用户一起运行? – quazardous

回答

0

我终于修好了,所以我会做这个,因为它就是帮助过我的答案,但,万一有人到达这里,读其他的人,因为他们是非常有用。

所以,基本上,我的问题是Selinux。这是文件的情况下移动时:

ls -lahZ /etc/httpd/conf.modules.d/10-subversion.conf 

-RW-R - R--。根目录unconfined_u:object_r:httpd_config_t:s0 /etc/httpd/conf.modules.d/10-subversion。CONF

,这是任何其他的文件里/etc/httpd/conf.modules.d/背景:

-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 01-cgi.conf 
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 10-php.conf 

那么,问题是有unconfined_u,而不是system_u

3

的可能解释是,网络服务器还没有完成其重新启动,当您尝试运行svn checkoutsystemctl restart httpd命令正在重新启动守护进程,并且不知道守护进程何时完成初始化,并且已经开始监听HTTP请求。

可能的解决方案:

  1. 运行sleep 10或重启后相似。
  2. 在一个循环中使用curlwget来“探测”守护进程,等待您从GET获得成功响应。
+0

好的答案,并非因为这一点,我已经测试过它。我编辑了这篇文章,以防它可以带来一些亮点。 – sysfiend

+1

plus1。替代'wget':'echo -n等待服务器启动...;直到nc localhost 80/dev/null;做echo -n。 ;睡觉0.1;完成' – anishsane

+0

但是加入睡眠不会伤害并且很安全 – quazardous

1

与尝试:

#!/bin/bash 

mv -f /root/10-subversion.conf /etc/httpd/conf.modules.d/10-subversion.conf 
mkdir /var/www/svn 
svnadmin create /var/www/svn/repo 
chown -R apache.apache /var/www/svn/repo 
chcon -R -t httpd_sys_content_t /var/www/svn/repo 
chcon -R -t httpd_sys_rw_content_t /var/www/svn/repo 
systemctl stop httpd && 
systemctl start httpd && 
mkdir /mnt/logs 
touch /mnt/logs/log 
svn checkout http://localhost/svn/repo 
svn checkout http://localhost/svn/repo /mnt/logs/ 
+0

我错误理解了答案,对不起。无论如何,我知道这不是关于命令运行速度太快。 – sysfiend

+3

&&不会在后台运行命令,它会等到最后一个命令执行成功后才启动下一个命令 – licklake