2016-04-21 21 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