标签: scripting

我能找到哪个脚本输出哪个错误吗?

有一个脚本调用其他脚本,它们调用其他脚本...我不知道究竟调用了哪些脚本以及调用了多少个脚本。我只知道其中一些正在添加 iptables 规则,当我调用根脚本时出现此错误。

iptables: No chain/target/match by that name.
iptables: No chain/target/match by that name.
Run Code Online (Sandbox Code Playgroud)

我的问题是我找不到哪个脚本输出这个错误。有什么方法或工具可以学习吗?

scripting linux bash

2
推荐指数
1
解决办法
103
查看次数

Hyper-V:根据 GUID 确定来宾的名称

我将如何根据 GUID 确定来宾的名称,反之亦然,最好只安装 Hyper-V/Server Core 股票?

理由:

我赞成有一个肮脏的技巧库,以便在非常需要时恢复。为了在不丢失状态的情况下立即停止 VM 来宾的所有(存储)操作,我曾经运行kill 17 <all VM's virtual processes>(发出SIGSTOP信号),然后在 ESXi/vSphere shell 中使用kill 19 <all VM's virtual processes>(发出信号SIGCONT)恢复。

我在 Hyper-V 上使用 Process Explorer 的“暂停”功能在vmwp.exe进程上尝试了相同的技术,它似乎有效。不过,我还没有找到一种方法来轻松识别要挂起的进程——vmwp 命令行只列出了一个 GUID。

scripting hyper-v

2
推荐指数
1
解决办法
4804
查看次数

新贵脚本与命令行:为什么会有这种行为差异?

我正在尝试设置 Tomcat 以从新贵开始。我发现以下作品:

  description "Tomcat Server"

  start on runlevel [2345]
  stop on runlevel [!2345]
  respawn
  respawn limit 10 5

  setuid tomcat

  env JAVA_HOME=/usr/lib/jvm/default-java
  env CATALINA_HOME=/opt/apache-tomcat-7.0.34

  script
    chdir $CATALINA_HOME
    exec $CATALINA_HOME/bin/catalina.sh run
  end script
Run Code Online (Sandbox Code Playgroud)

但是如果我删除chdir,tomcat 会启动,但是FileNotFound当我.wars加载时有很多例外。(也就是说:.wars它们自己确实加载了但它们在加载时抛出异常。)

请注意,此行为我从命令行调用时所看到的不同catalina.sh。从命令行调用,我可以/opt/apache-tomcat-7.0.34/bin/catalina.sh run 从任何目录(没有 chdiring)运行,一切都很好。

那么为什么chdir在我的新贵脚本中是必要的呢? (新贵环境与我的命令行环境有何不同?)


我不使用 chdir 时看到的错误示例:

Feb 22, 2013 3:00:11 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive my-war.war
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: my-war.log …
Run Code Online (Sandbox Code Playgroud)

scripting tomcat shell upstart

2
推荐指数
1
解决办法
3005
查看次数

nginx 不记录特定 IP 地址的请求

我试图不记录来自特定 IP 地址的请求,如下所示:

location = / {
    index index.php;
    if ( $remote_addr = "spe.ci.fic.ip" )
    {
        access_log off;
    }

}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,为什么?

scripting nginx ip logging

2
推荐指数
1
解决办法
3688
查看次数

Bash 脚本匹配 grep 输出并发送消息

我正在开发一个用于 monit 状态检查的脚本,以便我可以将 OK 状态消息发送到 NagiOS NSCA 服务器(被动检查)。我遇到的问题是,如果脚本 grep 函数不包含任何会触发消息发送的内容,我的 bash 脚本仍会发送消息。

脚本:

变量

rsysl='rsyslog'
log='messages'
Run Code Online (Sandbox Code Playgroud)

变量中的命令

host=$(hostname)
monstat=$(monit status|grep -C 1 '$rsysl')
nsca_status=$(echo -e "$host\t$rsysl\t0\tOK" | /usr/sbin/send_nsca -H mon.lv.lan -c /etc/send_nsca.cfg)
Run Code Online (Sandbox Code Playgroud)

监控状态命令

# Postfix check
$monstat
Run Code Online (Sandbox Code Playgroud)

如您所见,消息发送功能仅在状态等于未运行不可访问时发送消息

if [ "status" == "not running" ] && [ "status" == "not accessible" ]; then
   $nsca_status
else
   :
fi
Run Code Online (Sandbox Code Playgroud)

Grep 输出(在实际情况下,消息发送命令必须匹配运行可访问

# monit status|grep -C 1 'rsyslog'

Process 'rsyslog'
  status                            Running
-- …
Run Code Online (Sandbox Code Playgroud)

scripting bash monit

2
推荐指数
1
解决办法
2233
查看次数

如何根据模式拆分日志?

我希望能够根据其中找到的模式拆分日志文件。

例如处理所有日志并查找/(\w+)\s匹配/myresource但排除/myresource/anythingelse,将所有内容重定向到/var/log/extractedlog/myresource/access.log. 我可以使用一点 grep 轻松编写脚本,但是,尝试实时执行此操作可能会使问题变得更难。例如,我想两次调用该程序而不生成重复项。

编辑

这是一个完整的代码,可以使用 syslog-ng 获得类似的东西/etc/syslog-ng/syslog-ng.conf(信用获得接受的答案):

# no-parse let syslog load any source
source s_unparsed_source {
    file("/var/log/myservice/access.log"
        flags(no-parse));
};

# Just protect the input and avoid syslog-ng header to be added in the final log
template t_preserve_message {
    template("$MSG\n");
    template_escape(no);
};

# This will filter the message only matching the given expression
filter f_match_pattern1 {
    match("\/pattern1");
};

destination d_target1 {
    file("/var/log/target/pattern1/access.log" template(t_preserve_message));
};

# The actual logging …
Run Code Online (Sandbox Code Playgroud)

scripting log-files logging

2
推荐指数
1
解决办法
2442
查看次数

服务器重启脚本 - 无凭据

我正在考虑运行一个脚本来每晚重新启动 Windows 2012 服务器,并且所有指南似乎都用于使用计划任务。据我所知,管理员凭据的更改会破坏任务。

是否有工具/脚本意味着我不需要使用这些凭据,因为我们将密码保留很短的时间。

随时提出更多问题

scripting windows windows-server-2012

2
推荐指数
1
解决办法
388
查看次数

如何防止 Apache2 尝试将文件作为脚本执行?

所以基本上,我完全按照有关 iptraf 监控和 rrdtool 的指南进行操作。我/usr/lib/cgi-bin/像往常一样将它放入cgi 脚本中。然后,当我从浏览器访问它时,它制作的图像似乎已损坏。出于调试目的,我暂时将权限设置为 777。我认为 Apache2 正在尝试将 png 文件作为脚本执行。我该如何防止?下面是我的配置文件。提前致谢!

哦。我以 root 身份运行。

#tail /var/log/apache2/error.log

[Sun Mar 01 06:13:05 2015] [error] [client 192.168.0.241] Premature end of script headers: tcp_services-25-6hr.png, referer: http://192.168.0.1/cgi-bin/tcp.cgi
[Sun Mar 01 06:13:05 2015] [error] [client 192.168.0.241] Premature end of script headers: tcp_services-80-6hr.png, referer: http://192.168.0.1/cgi-bin/tcp.cgi
[Sun Mar 01 06:13:05 2015] [error] [client 192.168.0.241] Premature end of script headers: tcp_services-22-6hr.png, referer: http://192.168.0.1/cgi-bin/tcp.cgi
[Sun Mar 01 06:13:49 2015] [error] [client 192.168.0.241] (8)Exec format error: exec …
Run Code Online (Sandbox Code Playgroud)

scripting permissions debian cgi apache-2.2

2
推荐指数
1
解决办法
1851
查看次数

具有多个过滤器的复制项目

如何将副本与多个过滤器值一起使用?

例如,如果我只指定 1 个值来过滤 (*.jpg)

Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg -Destination D:\Users\MS5253\Desktop\Lots
Run Code Online (Sandbox Code Playgroud)

这为我创建了一个仅包含 jpg 文件的文件夹 (D:\Users\MS5253\Desktop\Lots\TEST)

但我也想过滤 xml 文件,我试过这个:

Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg,*.xml -Destination D:\Users\MS5253\Desktop\Lots
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误。

和这个 : Copy-Item -Path Y:\TEST -Recurse -include "*.jpg","*.xml" -Destination D:\Users\MS5253\Desktop\Lots

它不起作用...

感谢您的帮助,我正在使用带有 Powershell v4 的 Windows 7。

scripting windows powershell

2
推荐指数
1
解决办法
1万
查看次数

无法将 NGinx 版本存储到变量

这似乎是一个愚蠢的问题,但我似乎无法将nginx -v输出存储到变量中,甚至无法将其写入 bash 中的文件。 php --version并且mysql --version似乎工作正常,但 Nginx 不会保存。有没有办法做到这一点。我在尝试:

NGINX_VERSION=$(nginx -v)
nginx -v > /home/user/nginxversion.txt
Run Code Online (Sandbox Code Playgroud)

PHP 以同样的方式工作正常,但 nginx 不会保存。

PHP_VERSION=$(php --version)
php -v > /home/user/phpversion.txt
Run Code Online (Sandbox Code Playgroud)

scripting nginx bash centos7

2
推荐指数
1
解决办法
678
查看次数