Tag: shell

发送SIGTERM到所有进程

我有一个bash脚本调用run.sh启动多个进程 #!/bin/bash proc1 & proc2 & proc3 & final # this runs until sigterm 当我执行run.sh并发送一个SIGTERM到run.sh,我不认为SIGTERM被发送到final ,我不认为它被发送到proc1 , proc2和proc3 。 请注意,在这个用例中,这是一个运行run.sh的docker容器,运行run.sh docker stop是我试图发送SIGTERM的方式。 bash脚本最简单的方法是将sigterm发送到所有启动的进程? 我能想到的唯一方法是用&开始final ,然后在run.sh做一个while循环? 编辑 – 我试过了,但似乎并没有工作:在run.sh #!/bin/bash _term() { echo "Caught SIGTERM signal!" } trap _term SIGTERM echo "hi" sleep 100000 & wait $! 在运行docker站时,我从来没有看到Caught SIGTERM signal!

如何监听docker事件并在新事件发出时运行命令?

我知道docker events命令可以监听docker事件,但如何看待docker events的输出和运行命令时有新的输出?

如何使用shell文件将parameter passing给docker-compose.yml

我有docker-compose.yml,如下所示: version: '2' services: eureka-server: image: some-dtr-name/some-orgname/some-reponame:some-versionname mem_limit: somememory environment: SPRING_PROFILES_ACTIVE: some-profile JAVA_OPTS: -Xms256m -Xmx512m ports: – "some-port:some-port" restart: always networks: – cloud networks: cloud: driver: bridge 我想传递一些-dtr-name,some-orgname,some-reponame,some-versionname,somememory,some-profile,some-profile,some-port作为docker-compose文件的参数。 我正在使用shell文件来完成这个任务。 #!/bin/bash some-dtr-name="$1" some-orgname="$2" some-reponame="$3" some-versionname="$4" somememory="$5" some-profile="$6" some-profile="$7" some-port="$8" docker-compose up 我该怎么做这个任务?

Shell脚本 – “等待”不等待所有进程完成

在shell脚本中,我正在构build一些docker镜像(在后台),一旦完成,我正在运行它们(在后台),然后我必须等待所有这些完成。 代码如下所示: for tag in "${tags[@]}" do docker build -f dockerFilePath -t $tag . & done wait for tag in "${tags[@]}" do docker run $tag arg1 arg2 | tee logoutput & done wait 问题是不是第二个等待部分中的所有docker run命令都能够完成。 docker运行命令需要不同的时间才能完成,其中任何一个都是不完整的(总共4个)。 此外,我读了这个等待只适用于进程调用wait的直接subprocess,在这种情况下,我认为所有的docker build和docker run命令都是脚本进程的直接subprocess。 或者是错误的假设?

ssh使用golang中的交互式shell执行nsenter作为远程命令来debuggingdocker容器

我正在尝试在coreos上自动debuggingDocker容器。 我想要一个通过ssh连接到主机的脚本并执行nsenter 。 这将是非常方便的直接从我的OSX框跳转到一个容器,而不需要手动做很多事情。 我知道以这种方式进入集装箱可能会很糟糕,但是如果事情变得艰难,我想使用这样的工具。 所以这里是我在golang迄今为止。 我能够创build一个交互式shell。 在这里,我有问题,像使用ctrl+R反向searchbash历史logging会中断会话。 该代码在下面评论,因此不执行。 但是,我也能够执行一个命令,在这里nsenter ,但我收到错误stdin: is not a tty ,没有更多的事情发生。 我有兴趣知道为什么stdin在我的程序中不是一个tty ,我怎么能实现这一点。 谢谢 package main import ( "code.google.com/p/go.crypto/ssh" "io/ioutil" "log" "os" ) func privateKey() ssh.Signer { buf, err := ioutil.ReadFile("./id_rsa") if err != nil { panic(err) } key, err := ssh.ParsePrivateKey(buf) if err != nil { panic(err) } return […]

在容器中运行shell脚本

我使用lemonlatte / docker-webvirtmgr作为基础文件,但问题是没有为用户www-dataconfigurationssh密钥,所以我写了下面的shell脚本: #!/bin/sh if [ ! -d "/var/local/webvirtmgr/nginxhome" ]; then mkdir /var/local/webvirtmgr/nginxhome chown -R www-data:www-data /var/local/webvirtmgr/nginxhome usermod -d /var/local/webvirtmgr/nginxhome www-data su – www-data -s /bin/bash -c "ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ''" su – www-data -s /bin/bash -c "touch /var/local/webvirtmgr/nginxhome/.ssh/config && echo -e 'StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null' >> /var/local/webvirtmgr/nginxhome/.ssh/config" su – www-data -s […]

如何将几个Python脚本混合到一个shell脚本中?

我有一个本地存储库,现在我想将其部署到docker集装箱。 我想编写一个shell脚本来处理环境的设置。 shell脚本可能会按如下顺序做这样的事情: 1.安装virtualenv pip install virtualenv 2.build立一个名为new-env的新虚拟环境 virtualenv new-env 3.进入环境 cd new-env 4.activate source ./bin/activate 5.然后,我们需要安装依赖关系,使用pip freeze > requirements.txt输出的pip freeze > requirements.txt 。 注意我把这个文件放在根目录下。 所以: pip install -r ../requirements.txt 是否有可能将这些python脚本混合成一个shell脚本,以便我可以使用sh脚本进行设置? 谢谢。

使用远程API从AWS ECR中拖出Docker镜像

我已经按照这个post尝试从AWS ECR下载Docker镜像,但出现以下错误: 如果我做: #!/bin/sh repository="2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/nexus-pro" tag="2.13.0-np-1.0" ecr_token=$(aws ecr get-authorization-token –output text –query authorizationData[].authorizationToken | cut -d: -f2) docker_login=$(echo "{\"username\":\"AWS\",\"password\":\"${ecr_token}\", \"auth\":\"\",\"email\":\"none\"}" | base64) curl -X POST -d "" -H "X-Registry-Auth: ${docker_login}" http://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source} 然后我得到以下错误: $ error parsing HTTP 403 response body: invalid character 'Y' looking for beginning of value: "Your Authorization Token has expired. Please run 'aws […]

重用inheritance的图像的CMD或ENTRYPOINT

我怎样才能包括我自己的shell脚本CMD的容器启动/重新启动/附加,而不删除由inheritance的图像使用的CMD ? 我正在使用这个,它执行我的脚本很好,但似乎覆盖PHP的CMD : FROM php COPY start.sh /usr/local/bin CMD ["/usr/local/bin/start.sh"] 我应该做什么不同? 我正在避免复制/粘贴父图像的ENTRYPOINT或CMD的前景,也许这不是一个好方法。

如果默认的CMD是一个shell脚本,Docker停止退出代码-1

我正在用supervisord在Docker中构build一个tomcat容器。 如果Dockerfile中的默认命令是 CMD supervisord -c /etc/supervisord.conf 当我调度docker停止命令,容器退出码0成功退出。 但是,如果我有 CMD ["/run"] 并在run.sh中, supervisord -c /etc/supervisord.conf docker停止命令给我一个退出码-1。 在查看日志时,似乎supervisord没有收到指示退出请求的SIGTERM。 2014-10-06 19:48:54,420 CRIT Supervisor running as root (no user in config file) 2014-10-06 19:48:54,450 INFO RPC interface 'supervisor' initialized 2014-10-06 19:48:54,451 CRIT Server 'unix_http_server' running without any HTTP authentication checking 2014-10-06 19:48:54,451 INFO supervisord started with pid 6 2014-10-06 […]