脚本在构build失败,但从Docker容器工作

我正在尝试通过Docker运行unit testing,以便对文件和目录创build,移动和重命名作出反应。

这是脚本:

#/bin/bash # Launch Redis server redis-server --daemonize yes # Start directory_observer python /test/directory_observer/src/directory_observer.py --config=/test/directory_observer/tests/directory_observer.ini & # Execute test script (operations in the folders) bash /test/directory_observer/tests/Dockerfile_testing/directory_observer_test_cases.sh # Run Python unit test based on the operations executed above python /test/directory_observer/tests/Dockerfile_testing/test_directory_observer.py cd /test/directory_observer/ && nosetests 
  • redis是监视器发现的事件存放的地方

  • directory_observer.py是目录监视器

  • directory_observer_test_cases.sh只是一个创build,重命名和移动一些文件和目录的bash脚本。

  • test_directory_observer.py只是一个Pythonunit testing脚本(在这里运行以进行debugging)

问题是一些testing失败没有任何明显的原因在构build,但如果我尝试从一个正在运行的容器完全相同的bash指令,它的工作原理。

如果你需要directory_observer_test_cases.sh的代码:

 #!/bin/bash cd /test/monitored1 # Create, rename and delete file touch file1 mv file1 rename1 # Same as above, but in a sub-directory mkdir sub-monitored cd /test/monitored1/sub-monitored touch file2 mv file2 rename2 cd /test/monitored2 # Create, rename and delete file to test second monitored dir touch file12 mv file12 rename12 ### NOT MONITORED FROM HERE ### # Rename the monitored directory cd /test mv monitored1 watched1 # Same as #1, but in the newly renamed directory cd /test/watched1 touch file3 mv file3 rename3 # Move the second monitored directory cd /test mv monitored2 directory_host # Same as #1, but in the newly moved directory cd /test/directory_host/monitored2 touch file4 mv file4 rename4 # Operations in the non-monitored directory cd /test/ingored.t touch file5 mv file5 rename5 

当然,你问,是的,我已经读过这个问题,但它并没有帮助我(或者我失去了一些东西)。

事实certificate,由于目录监视器是作为后台进程启动的,testing脚本在监视器初始化之前就已启动。 因此,一些事件被遗漏,testing失败。

在启动testing脚本之前添加sleep 1解决了问题,现在一切运行正常。