如何运行基于脚本的工具,该工具将在文件到达时处理连续下载到给定目录的文件?我想尽量减少延迟(~1 秒就可以了),脚本可以有自己的无限循环。
我知道几种方法,例如:
.bashrc或.profile调用我的脚本的自动登录用户什么方法最有效?
我想知道一个命令,它将显示文件系统(当前)有多忙。我假设存在这样一个命令来显示这个。使用这样的命令,是否有我应该了解的特定参数?另外,是否有一个单独的命令可以告诉我平均负载是多少?
我该怎么做(使用 Linux)?
我想监视特定文件接口的网络流量。
如果总流量超过 60mb,我想停止接口。
有没有可能的方法来做到这一点?
我想监控日志文件中的错误,然后向管理员发送电子邮件。
日志文件包含如下数据
11 Aug 02:30 Service1 restarted
11 Aug 05:35 Service1 restarted
11 Aug 08:43 Service2 restarted
11 Aug 11:20 Service1 restarted
11 Aug 14:53 Service2 restarted
Run Code Online (Sandbox Code Playgroud)
我想创建一个每 5 分钟运行一次的脚本,并检查最后一次服务重启并发送电子邮件。
例如:如果脚本在 02:35 运行,它会看到Service1重新启动,因此它会发送一封电子邮件,如Service1 restarted at 02:30. 现在,当脚本在 5:45 运行时,它应该发送Service1仅在 05:35 重新启动的电子邮件(不应包括 02:35 重新启动)
有没有办法达到这个要求?我基本上是 Linux 和 Shell 脚本的新手
最近我在我们的服务器上遇到了一个负载过高的问题。我观察top了半个小时,发现是 Nagios 分叉了许多短命的进程。在弹跳 Nagios 之后,一切都恢复了正常。
我的问题是,如何更快地找出像这样分叉的根进程?
谢谢。
我有一个假设的情况:
假设我们有两个 strace 进程 S1 和 S2,它们只是相互监视。
这怎么可能?
好吧,在 strace 的命令行选项中,-p PID是传递所需 PID 的方式,当我们发出 strace 命令时,它(在我们的例子中)还不知道。我们可以更改 strace 源代码,这-P 0意味着向用户询问 PID。例如,来自 STDIN 的 read()。当我们可以在两个 shell 会话中运行两个 strace 进程并在第三个 shell 中找到 PID 时,我们可以将该输入提供给 S1 和 S2 并让它们相互监视。
S1 和 S2 会卡住吗?或者,进入无限循环,或立即崩溃或...?
再一次,假设我们有另一个 strace 进程 S3,使用-p -1,通过修改源代码,我们用它来告诉 S3 监视自己。例如,使用 getpid() 而不使用 STDIN。
S3会崩溃吗?或者,它会挂起而无法进一步处理吗?它会等待某个事件发生,但是,因为它在等待,所以不会发生任何事件吗?
在 strace 手册页中,它说我们无法监视 init 进程。是否有任何其他限制由 strace 或内核强制执行,以避免循环依赖或循环?
一些特殊情况:
S4 监控 S5,S5 监控 S6,S6 监控 S4。
S7 和 S8 相互监视,其中 S7 是 S8 的父级。 …
我想知道什么程序调用了特定的可执行文件,包括该可执行文件何时通过 shebang 行用作解释器。
这与了解哪个程序访问特定文件并不完全相同。例如,auditctl -w /usr/bin/myprogram告诉我程序正在由……本身执行,因为审计事件是在成功execve调用后生成的。
一种选择是用包装程序替换可执行文件,就像这样......
#!/bin/sh
logger "$0: executed by uid=$(id -u) ruid=$(id -ur) cmd=$(ps -o args= -p $PPID)"
exec "$0.real" "$@"
Run Code Online (Sandbox Code Playgroud)
但这需要移动实际文件,这是破坏性的(文件不能是只读的,它与包管理器所做的修改相冲突,等等)。如果将程序用作脚本的解释器,则它不起作用,因为 shebang 不嵌套。(在那种情况下,auditctl -w /usr/bin/interpreter确实给出了一个有用的结果,但我想要一个适用于这两种情况的解决方案。)如果/bin/sh是 bash,它也不适用于 setuid 程序,因为 bash 会删除特权。
我如何监视特定可执行文件的执行,包括将可执行文件用作 shebang 解释器,特别是记录有关调用进程的有用信息(不仅是 PPID,而且至少是进程名称或父可执行文件路径,理想情况下还有调用用户和参数)?最好不要用包装器替换文件。特定于 Linux 的解决方案很好。
我正在尝试跟踪过多的磁盘写入来自何处,无论是通过邮件传入、数据库写入、日志还是其他来源。服务器上大约有 75 个帐户,有些是活跃的,有些不是。
我可以执行任何类型的磁盘 I/O 命令来指定正在发生磁盘写入的目录吗?如果是数据库写入,我希望我会看到它通过/var/lib/mysql/that_database_name
- 添加 -
我依稀记得大约 2 年前,我执行了一些类似于tail -f我看到写入通过的命令,我认为指定了文件夹。如果我正在跟踪磁盘写入日志(如果存在这样的事情),那么它的位置或以这种格式进行的访问将完成我想要的操作。
根据Monit 链接:
Monit 不使用任何环境变量。但是,当 Monit 执行启动/停止/重启程序或 exec 操作时,它会设置几个环境变量,可执行文件可以利用这些环境变量来获取有关触发该操作的事件的信息。
是否可以在自定义操作上使用这些变量?
例如,对于通知,我不使用邮件服务,而是使用自定义脚本,它应该接收该 ENV monit 变量并提供输出。这是测试环境变量的基本示例。
check process dhcp with pidfile "/var/run/dhcpd.pid"
start = "/etc/init.d/isc-dhcp-server start"
stop = "/etc/init.d/isc-dhcp-server stop"
if does not exist program then exec "/bin/echo $MONIT_EVENT > /tmp/monittest"
depends on lan
Run Code Online (Sandbox Code Playgroud)
当我故意让程序失败时,比如
check process dhcp with pidfile "/var/run/unexisting.pid"
我在/tmp/monittest. 难道我做错了什么?
我已经写了一些多线程测试,现在我想确保这个测试的最高 CPU 使用率等于100 * CPU_NUMBER当前机器的最高 CPU 使用率。有可能吗?
UPD 0:我说的是 Linux 系统。
monitoring ×10
files ×2
linux ×2
shell-script ×2
cpu ×1
cpu-usage ×1
daemon ×1
disk-usage ×1
executable ×1
filesystems ×1
fork ×1
interface ×1
kernel ×1
monit ×1
networking ×1
performance ×1
process ×1
recursive ×1
scripting ×1
shell ×1
startup ×1
strace ×1
testing ×1
ubuntu ×1