Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 执行bash脚本和手动执行脚本之间有区别吗?_Linux_Bash_Svn_Centos - Fatal编程技术网

Linux 执行bash脚本和手动执行脚本之间有区别吗?

Linux 执行bash脚本和手动执行脚本之间有区别吗?,linux,bash,svn,centos,Linux,Bash,Svn,Centos,在过去的两天里,这件事一直发生在我身上。我正试图在SaltStack和一个非常简单的bash脚本的帮助下建立一个subversion存储库 Salt处理这个问题的方法非常简单,它只需将10subversion.conf从主机移动到minion(从)上的/root/,并安装neded包,如subversion、httpd和mod_dav_svn 发生所有这些之后,将运行下一个脚本: #!/bin/bash mv -f /root/10-subversion.conf /etc/httpd/con

在过去的两天里,这件事一直发生在我身上。我正试图在SaltStack和一个非常简单的bash脚本的帮助下建立一个subversion存储库

Salt处理这个问题的方法非常简单,它只需将
10subversion.conf
从主机移动到minion(从)上的
/root/
,并安装neded包,如
subversion
httpd
mod_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
,但现在我正在移动它,所以我恢复了快照,再次手动编辑文件并工作。我在移动和编辑文件时检查了文件的权限和所有权,两者都相同(如下所示):


可能的解释是,当您尝试运行
svn checkout
时,Web服务器尚未完成重新启动。
systemctl restart httpd
命令正在重新启动守护程序,不知道守护程序何时完成初始化,并开始侦听HTTP请求

可能的解决办法:

  • 重新启动后运行
    sleep 10
    或类似程序
  • 在一个循环中使用
    curl
    wget
    来“探测”守护进程,直到从get获得成功响应

  • 可能的解释是,当您尝试运行
    svn checkout
    时,Web服务器尚未完成重新启动。
    systemctl restart httpd
    命令正在重新启动守护程序,不知道守护程序何时完成初始化,并开始侦听HTTP请求

    可能的解决办法:

  • 重新启动后运行
    sleep 10
    或类似程序
  • 在一个循环中使用
    curl
    wget
    来“探测”守护进程,直到从get获得成功响应
  • 尝试以下方法:

    #!/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/
    
    尝试以下方法:

    #!/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/
    

    我终于把它修好了,所以我会把它作为我的答案,因为它帮助了我,但是,如果有人到了这里,请阅读其他的,因为它们非常有用

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

    ls -lahZ /etc/httpd/conf.modules.d/10-subversion.conf
    
    -rw-r--r--。root root
    unconfined\u
    :object\u r:httpd\u config\u 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
    ,因此我将回答这个问题,因为这对我很有帮助,但如果有人到了这里,请阅读其他问题,因为它们非常有用

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

    ls -lahZ /etc/httpd/conf.modules.d/10-subversion.conf
    
    -rw-r--r--。root root
    unconfined\u
    :object\u r:httpd\u config\u 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
    


    因此,问题是使用
    未定义的
    而不是
    系统

    如何运行脚本?执行错误是什么?脚本是通过SaltStack运行的,带有
    cmd.script
    ,我在问题上发布的错误应该是相同的。但Exec上下文可能不同。在cron中,有时未设置路径或主路径。Ptty也可以修改行为。该脚本是否与同一用户一起运行?该脚本以
    root
    身份运行,这不是我第一次使用Salt,实际上还有一些脚本正在执行,并且工作正常。是否可能存在一些
    别名
    /
    bash函数
    ,它正在重写该脚本中的命令?您可以使用名为
    svn
    的函数,这些函数可以使用一些附加参数或环境在内部调用
    命令svn
    。如何运行脚本?执行错误是什么?脚本是通过SaltStack运行的,带有
    cmd.script
    ,我在问题上发布的错误应该是相同的。但Exec上下文可能不同。在cron中,有时未设置路径或主路径。Ptty也可以修改行为。该脚本是否与同一用户一起运行?该脚本以
    root
    身份运行,这不是我第一次使用Salt,实际上还有一些脚本正在执行,并且工作正常。是否可能存在一些
    别名
    /
    bash函数
    ,它正在重写该脚本中的命令?您可以使用名为
    svn
    的函数,这些函数可以使用一些附加参数或环境在内部调用
    命令svn
    。我编辑了这篇文章,以防它能带来一些启发。替代
    wget
    echo-n等待服务器启动。。。;直到nc localhost 80/dev/null;做回显;睡眠0.1;完成
    但添加睡眠不会有什么坏处safe@anishsane-仅使用
    nc
    的问题在于,您无法轻松检测到守护进程“启动”但返回非成功响应的情况。回答不错,虽然不是因为这个,但我已经测试过了。我编辑了这篇文章,以防它能带来一些启发。替代
    wget
    echo-n等待服务器启动。。。;直到nc localhost 80/dev/null;做回显;睡眠0.1;已完成
    但添加睡眠不会影响