Articles of bash

父bash脚本没有收到“陷阱”,尽pipe进程仍在运行

我实际上想要实现的是: 我试图让一个自定义的守护进程在使用SysVinit的系统上工作。 我已经有引导程序/etc/init.d/xyz脚本,它调用我的守护进程,但它不会自动将它放在后台。 这类似于nginx这样的服务:二进制背景本身 – 也就是说,不是/etc/init.d/nginx脚本负责守护进程,所以如果直接运行/opt/nginx/sbin/nginx也会遇到守护进程/后台执行。 问题 我的问题是,使用我当前的方法,该守护进程不会终止与父进程(这是什么被终止时,你叫service xyz stop )。 我正在使用运行daemon.sh &脚本的父launcher.sh脚本。 然而,当我杀死launcher.sh , daemon.sh继续运行,尽pipe我尽了最大的努力与trap (它从来没有被称为): – > launcher.sh #!/bin/bash function shutdown { # Get our process group id PGID=$(ps -o pgid= $$ | grep -o [0-9]*) echo THIS NEVER GETS CALLED! # Kill process group in a new process group setsid kill — […]

不要在bash上工作循环

我已经在bash上写了脚本。 它获得了所有的接口列表。 并在循环中与variables进行比较。 但是这并不好。 我的脚本: #!/bin/bash search=`ls -1 /sys/class/net | grep -v lo` echo $search eth=eno1 echo $eth for i in $search; do if [ $i == $eth ]; then echo "You choose is: $i" else echo "not found" fi done 结果我有: dummy0 eno1 enp4s0 virbr0 virbr0-nic eno1 not found You choose is: eno1 not […]

控制bash工作作为一个组?

有一种方法来控制给定的bash会话中的一组作业吗? 理想情况下,我想说的是: $ prog1 & $ GROUP=FOO prog2 & $ GROUP=FOO prog3 & $ GROUP=BAR prog4 & 然后有例如kill %FOO只终止prog2和prog3 。

如何运行将来可能会更改的多个正在进行的Python脚本?

在prod环境中,我想运行一些在启动时运行的python脚本,并且永远不会停止。 目前我正在尝试将它们作为守护进程来运行,即systemd中的这样的事情: #!/bin/bash python3 a.py& python3 b.py& python3 c.py& … 这是一种可持续的/正确的方式来实现我需要的东西吗? 而且,这些脚本将来也会有所改变。 还可以将它们拆分成更小的部分,以后不需要更改,但这会增加systemd中bash脚本中的python脚本的数量。 (想象一下,从各种来源获取数据,未来将继续增加数据源。)只要在列表中添加一个新脚本,并且每次需要新增内容时都可以启动一个服务,这将是一个不错的select吗? 非常感谢!

Bash内存泄漏从SSH断开我?

有人可以向我解释这里发生了什么? 我只是键入cd /some/directory ,也许我按下了目录列表的标签,当发生以下事情,我从服务器断开连接: me@psrv1:/opt/data$ cd /opt/data/perl malloc: ../bash/parse.y:6050: assertion botched free: called with already freed block argument last command: ls Aborting…Connection to psrv1 closed.

Nagios插件不能从服务器,但本地工作

我已经写了一个小的bash脚本来检查docker服务是否正常运行,当我在客户端上进行testing的时候是非常好的,但是不知道从nagios服务器上运行check_nrpe来执行我的脚本,它总是显示脚本的一部分。 我的nrpe.cfg也是正确的。 这是脚本: #!/bin/bash CONTAINER=ubuntu_container RUNNING=$(docker inspect –format="{{ .State.Running }}" $CONTAINER 2> /dev/null) if [ "$RUNNING" == "true" ]; then echo "OK – $CONTAINER is running." exit 0 else echo "CRITICAL – $CONTAINER is not running." exit 2 fi 从nagios服务器输出: root@nag_server nagios]# /usr/lib64/nagios/plugins/check_nrpe -t 30 -H docker-host.intenallab -c docker_container CRITICAL – ubuntu_container is not running. […]

删除不包含文件名匹配glob / regex的所有文件夹

我想要做以下事情。 我有深度2文件层次结构像这样: A | B | | g | | h50000 | C A,B,C是文件夹。 我想删除所有没有匹配特定模式文件的文件夹(在我的情况下, 50000是模式,glob风格)在深度级别2(在这个例子中,文件夹C只应该被删除,除了内容,而A仍然) 在我的应用程序,我很好,如果我删除所有的文件夹都没有包含文件名匹配模式的文件夹。 (如果不指定要删除哪个深度,将会更容易删除A)。 我怎么能在Linux机器上的bash中做到这一点?

NetworkManager向上运行两次脚本

我的系统,Ubuntu 16.04,使用NetworkManager 。 为了挂接接口事件,我在/etc/network/if-up.d/放置了一个脚本。 脚本的头像如下所示: #!/bin/bash NETIF="enp2s0" if [ "$IFACE" != $NETIF ]; then exit 0 fi /some/cmd/output &>> /var/log/if-up.log iptables -F -t nat … 系统启动时,以及通过小程序手动重新启动networking,脚本运行两次。 这不会是这样的问题,但我正在运行一些需要一些时间的命令。 有什么我可以做,以避免这一点?

SELinux – 脚本将SSH密钥上载到远程服务器,但无法通过SSH进行连接

我写了这个脚本,现在可以在没有安装SElinux的系统上完美工作。 echo Enter server IP: read server scp /home/Zenoss/.ssh/authorized_keys random@$server:/home/random sshpass -p randompassword ssh -t random@$server sudo -i 'useradd zenoss; sudo mkdir /home/zenoss/.ssh; sudo mv /home/random/authorized_keys /home/zenoss/.ssh/; sudo chmod 700 /home/zenoss/.ssh; sudo chmod 600 /home/zenoss/.ssh/authorized_keys; sudo chown -R zenoss /home/zenoss/.ssh; sudo chgrp -R zenoss /home/zenoss/.ssh; exit' 所以在没有SElinux的服务器上,脚本可以工作,然后Zenoss可以通过SSHlogin到远程服务器并开始监视。 但是,在启用了SELinux的系统上,脚本可以正常工作,但是Zenoss无法通过SSH连接到远程服务器,debugging信息显示它没有看到成功设置的authorized_keys文件。 OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: […]

Ubuntu – adduser / useradd都要求设置密码,可以强制脚本绕过这个?

我有一个在Centos上运行正常的脚本,因为useradd不需要在那里设置密码,但是同样的脚本不需要在Ubuntu服务器上工作,因为它需要这个信息。 我理想的情况是,不要在我的脚本上为ubuntu服务器强制设置密码,要么在useradd命令中添加一行代码设置密码。 如果我只是将sudo passwd 用户添加到我的脚本中,则只会在useradd命令后才生效。 有任何想法吗?