我打算写一个bash脚本,并在后台运行它作为守护进程。 该脚本将持续监视tomcat服务器日志是否有任何exception,错误等 当发生exception时,它会触发一个事件,并相应地处理它(比如说,通过java线程转储等)。 如果在日志中发现错误,我可以编写关于如何处理的逻辑。 我只需要知道如何将守护进程的信息传递给我的error handling脚本。 你能给我一个如何实现这个想法吗? 此外,任何工具,可以帮助我完成这个任务。 任何帮助都感激不尽。
我从来没有用扩展名保存过任何我的bash脚本,而且我最近把一个bash脚本推到了Github上,并意识到它没有正确地突出显示正确的语法,比如:注释,variables,循环等等.Github甚至标记了该脚本作为一个Javascript文件,并不读取指令#!/bin/bash 。 我怎样才能解决这个问题,并确保我的脚本正确解释为Github上的Bash脚本?
我在Debian中使用bash。 当我将一个variables导出到我的子shell的环境中时,它的工作原理是: aUser> EXPORTED=exported aUser> export EXPORTED aUser> su myUser myUser> echo $EXPORTED # prints 'exported' 但是当我创build一个loginshell时,它不会: aUser> EXPORTED=exported aUser> export EXPORTED aUser> su myUser –login myUser> echo $EXPORTED # prints '' 如何导出一个variables或函数,以便我可以在loginshell中使用它? 我需要能够在我的父母脚本中定义之后使用它,所以我不能把它放在例如。 .profile文件。
我的问题基本上是如何把现有的两个步骤变成一步。 我有一个工作的SSH隧道使用这样的中间人服务器设置两台计算机之间: Kubuntu_laptop—>nat_fw—>Debian_Server<–nat_fw<–Kubuntu_desktop 我现在所做的是从Kubuntu_laptop到Debian_Server,然后从Debian_Server到Kubuntu_desktop的SSH。 我想做一个SSH命令,在我的Kubuntu_laptop的bash上发布,导致我连接到Kubuntu_desktop(shell / bash)。 我现在使用的命令如下。 步骤1: me@kubuntu_laptop:~$ ssh -i ~/.ssh/id_rsa admin@debian_server 第2步: admin@debian_server:$ ssh -p 1234 -i /home/admin/.ssh/id_rsa admin@localhost 然后我通过SSH(从kubuntu_laptop)连接到kubuntu_desktop。 所有SSH连接都需要RSA密钥。 密码login被禁用。 并注意到在两台计算机上的计算机用户帐户是不同的。 关于这条腿的连接: Debian_Server<–nat_fw<–Kubuntu_desktop 这是如何build立的。 第0步: autossh -M 5234 -N -f -R 1234:localhost:22 [email protected] -p 22 通知Kubuntu_desktop以[email protected](不是admin @ debian_server)连接到中间人。 但是当我连接到Kubuntu_desktop,我作为pipe理员用户连接。 我无法更改现有的监视端口(5234)或远程( – R)端口号(本例中为1234)。 我无法更改SSH安全性以允许密码login。 我无法打开任何新的防火墙端口。 我无法更改用户帐户(笔记本电脑除外)。 (一旦我有这个工作,我想获得vnc或远程桌面支持解决scheme在SSH隧道上工作。)
发行版是RHEL 5。 该脚本已被添加到chkconfig像这样: # chkconfig –add script # chkconfig script on 但是在拿起机器时拒绝启动,可能是什么问题? #!/bin/bash # # chkconfig: 2345 20 80 # description: starts script . /etc/rc.d/init.d/functions PATHB=/xxxx/opt/virtualenvs/primary/bin USER=userx function start() { /usr/bin/sudo /bin/su – $USER -c "$PATHB/script start" } function stop() { /usr/bin/sudo /bin/su – $USER -c "$PATHB/script stop" } function status() { /usr/bin/sudo /bin/su – […]
我有一个脚本,通过tar运行系统文件的备份作为我的服务器的cronjob。 每次脚本被解雇,它都成功完成任务。 所有的备份都经过testing,看起来可以正常工作,而且没有损坏。 但是,我的系统停滞了一段时间,它的速度落后于我的命令。 这与我运行graphics桌面的条件相同。 那么,为什么tar运行后系统会停止运行呢? 这是我的脚本中的命令在crontab中进行tar备份运行。 tar -zcvf tarbackup.tar.gz –one-file-system \ –exclude=/run \ –exclude=/tmp \ –exclude=/home \ –exclude=*.system.tar.gz \ –exclude=*.home.tar.gz \ / 编辑: 为了解决这个问题,我不得不每次重启。 我想知道为什么会发生,所以我可以探索运行tar备份的选项,而不必重新启动系统。
我在./src/下有一个目录树 我在./work/下有另一个匹配的目录树 我试图复制src中的所有文件来工作,同时保持目录结构,并排除以.java结尾的所有文件。 这是我迄今为止的尝试: find src -type f ! -iname *.java -exec cp {} work \; 这几乎可以工作,但是所有的文件都被放到工作的顶层,而不是放到目录树的正确位置。 我怎样才能做到这一点? (在Mac OS X 10.9上使用bash)
我正在尝试在Debian上testing特定软件包版本的信息。 不过,我反对APT的结果似乎没有做任何事情。 我不知道如何编写bash命令: if [[ $(apt-get -s install golang | grep "E: Unable to locate") ]]; then echo "problem" exit; fi if apt-get -s install golang | grep "E: Unable to locate" > /dev/null; then echo "problem" exit; fi OUTPUT=`apt-get -s install golang | grep –quiet "E: Unable to locate"` if [ -n "$OUTPUT" ]; […]
我正在开发一个nagios / collectd检查每个服务器上的时间检查。 我已经完成了bash脚本来从Collectd WSP文件获取信息,并根据nagios服务器时间( date +%s )检查它们。 Collectd从上次发送起60秒后发送date +%s值。 我面对的问题是如何使检查命令计算,如果该值不同步最大60秒,那么一切正常,如果超过60秒不同步,那么它的关键。 剧本: 在nagios服务器上收集时间并收集其他服务器发送的WSP文件。 每个命令都会返回一个纪元值( $time是从nagios服务器获取的, $stime是从collectd WSP文件中获取的): time=`date +%s` stime=`whisper-fetch –from=$(expr $(date +%s) – 60) –until=$(date +%s) $WSP_PATH | cut -c1-10` 关键IF语句。 如果这个$stime与从nagios服务器获得的$time不匹配,那么它会发送关键的。 我想这是,如果nagios服务器的时间值超过60秒不同步相比,WSP的输出值,那么它的关键,否则其确定。 if [ "$stime" -ne "$time" ] ; then echo CRITICAL: Server time is out of sync! exit $STATE_CRITICAL fi OK声明: echo […]
我有一个脚本应该执行由给定的参数组成的curl命令的问题。 它工作,如果我在子shell中使用eval ,但是,我想避免,因为它似乎是不好的风格据此 这里是脚本的相关部分: #!/bin/bash COMMAND="curl -s -o /dev/null -w '%{http_code}' -X POST -H \"Content-Type:application/json\" -H \"Accept:application/json\" https://www.example.com/login -d '{\"username\":\"$1\",\"password\":\"$2\"}'" echo $(eval $COMMAND) 与eval,我得到201或401取决于给定的凭据的有效性,如预期。 如果我删除eval并使用echo $($COMMAND)我得到了400,这表明一个错误构造的数据参数。 有人可以向我解释,我如何构build命令,以便我可以直接将它传递给子shell?