适用于Ubuntu 16.04的BASH警报脚本 -- 16.04 领域 和 command-line 领域 和 bash 领域 和 scripts 领域 askubuntu 相关 的问题

BASH Alert Script for Ubuntu 16.04


简体版||繁體版
0
vote

问题

中文

我们在终端上的以下命令中看到正在运行的PHP脚本:

  echo 'User | ProcID | CPU | MEM | ----------------------- START | ELAPSED ---------- COMMAND';  ps aux --forest | grep php;   

我想在同一时间运行多个文件副本时收到电子邮件警报。 甚至可以杀死前面的过程!

这在cron作业中发生,当一个脚本以某种方式卡住,并且cron的下一个循环运行时间到来时,您有一个卡住(或不完整,缓慢的脚本)继续运行,并且该脚本的新实例同时运行。

您可能会提供更好的BASH解决方案(除了修改PHP脚本之外)。

有关问题脚本示例,请参见所附图片:

  _ php -f /var/webserver/public_html/cron/scheduled_job_1.php (process id: 3824)   

 Ubuntu 16.04的BASH警报脚本。

英文原文

We see the running PHP scripts with this command below on terminal:

echo 'User | ProcID | CPU | MEM | ----------------------- START | ELAPSED ---------- COMMAND';  ps aux --forest | grep php; 

I would like to be email alerted when there is more than one copy of a file running at the same time. Even kill the earlier process maybe automatically!

This happens on cron jobs, when one script is stuck somehow and there comes the the next cycled run time for the cron and you have a stuck (or incomplete, slow script) continuing to run and a new instance of the same script running at the same time.

You may offer a better BASH solution (other than modifying the PHP script).

See image attached for example problem script:

\_ php -f /var/webserver/public_html/cron/scheduled_job_1.php (process id: 3824) 

BASH Alert Script for Ubuntu 16.04.

           

回答列表

3
 
vote
vote
最佳答案
 

确保您没有两个实例的PHP脚本运行的方法是iMHO在BASH中编写一个微小的包装脚本,在运行它之前会杀死确切命令的任何当前正在运行的实例。

然后,您可以在CronJob中执行此包装脚本而不是实际的PHP命令。

可能的包装器实现:

  #!/bin/bash  my_command='php -f /var/webserver/public_html/cron/scheduled_job_1.php'  # kill processes with the exact command line as above, if any are running if pkill -fx "$my_command" ; then     # You can do something here, which runs only if a process was killed.     # The command below would just echo a warning to the terminal (not visible as a cronjob)     echo "$(date) - WARNING: Previous instance of '$my_command' was killed." fi  # (re)run the command $my_command   

或期望命令作为参数运行的通用包装器。

  #!/bin/bash # This script expects a command as argument(s), like e.g. "my_wrapper sleep 60"  # kill processes with the given command line, if any are running if pkill -fx "$*" ; then     # You can do something here, which runs only if a process was killed.     # The command below would just echo a warning to the terminal (not visible as a cronjob)     echo "$(date) - WARNING: Previous instance of '$*' was killed." fi  # (re)run the command "$@"   

如果您将其保存,例如,作为 /usr/local/bin/my_wrapper ,您可以称之为

  my_wrapper php -f /var/webserver/public_html/cron/scheduled_job_1.php   
 

The easiest way to ensure you have no two instances of your PHP script running would be IMHO to write a tiny wrapper script in Bash that kills any currently running instances of your exact command before running it.

You can then execute this wrapper script in your cronjob instead of the actual PHP command.

Possible wrapper implementation:

#!/bin/bash  my_command='php -f /var/webserver/public_html/cron/scheduled_job_1.php'  # kill processes with the exact command line as above, if any are running if pkill -fx "$my_command" ; then     # You can do something here, which runs only if a process was killed.     # The command below would just echo a warning to the terminal (not visible as a cronjob)     echo "$(date) - WARNING: Previous instance of '$my_command' was killed." fi  # (re)run the command $my_command 

Or a generic wrapper that expects the command to run as argument.

#!/bin/bash # This script expects a command as argument(s), like e.g. "my_wrapper sleep 60"  # kill processes with the given command line, if any are running if pkill -fx "$*" ; then     # You can do something here, which runs only if a process was killed.     # The command below would just echo a warning to the terminal (not visible as a cronjob)     echo "$(date) - WARNING: Previous instance of '$*' was killed." fi  # (re)run the command "$@" 

If you save it e.g. as /usr/local/bin/my_wrapper, you can call it like

my_wrapper php -f /var/webserver/public_html/cron/scheduled_job_1.php 
 
 
         
         

相关问题

2  如何监视本地文件的更改,对其应用RegEx替换并保存/覆盖到目标文件?  ( How to monitor a local file for changes apply a regex replace on it and save ov ) 
我想启动一个脚本或一些监视文本文件更改的东西。当文件更改时,我想通过RegEx解析器运行它以替换一些文本,然后将修改后的文件输出到目标文件。 我对Linux还是很陌生,所以请耐心等待,但是整理一下会很不错,感谢您的提前帮助... ...

9  闲置(2小时)后如何关闭Ubuntu?  ( How to shutdown ubuntu after 2 hours of idle ) 
运行:Xubuntu 14.04 32位。 我读了一些过时的,不起作用的,与众不同的作品,这些都是我想要在这里和其他地方得到解答的。设置为自动启动后,我的脚本导致启动时关闭了笔记本电脑。 尽管该工具于2011年过世,并且在Lauchpad上存在一个错误,表明他的确切选项不可用,但我也尝试安装了complexshutd...

4  在Ubuntu 14.04上找不到spawn命令  ( Spawn command not found on ubuntu 14 04 ) 
我正在使用Ubuntu 14.04,并且我想使用GeoIP阻止SSH登录国家(从 https://www.axllent.org/docs/view/ssh-geoip/ ), 请找到命令的输出: $ spawn spawn: command not found 因此我已经安装了 expect 软件包,但仍...

135  如何仅通过双击Windows中的.EXE文件来执行脚本?  ( How to execute a script just by double clicking like exe files in windows ) 
如何双击Windows中的 .exe 文件,使bash脚本可执行?我尝试创建启动器并将脚本分配给它,但是有两个结果: 终端闪烁,消失,什么也没做。 您必须指定在终端中运行才能工作。 我有一个脚本可以在脱机PC上安装tomcat,包括该脚本中tomcat的所有依赖项。我需要使脚本像Windows一样双击运行,因为大...

22  Bash脚本未从crontab执行[重复]  ( Bash script not executing from crontab ) 
此问题已在此处提供答案: 为什么crontab脚本不起作用? (46个答案) ...

35  如何指示Nautilus预生成缩略图?  ( How can i instruct nautilus to pre generate thumbnails ) 
我有一个庞大的PDF文档库(论文,演讲,讲义),希望能够快速浏览。为此,我需要缩略图。 但是,与此同时,我看到 ~/.thumbnails 文件夹中堆积了一些我并不需要的拇指。在不删除重要拇指的情况下删除缩略图垃圾是不可能的。如果要删除它们,则必须转到每个包含重要PDF文档的文件夹,然后重新生成缩略图缓存。 我希望能...

23  如何使用bash脚本找到我的Internet服务提供商(ISP)?  ( How can i find my internet service provider isp using a bash script ) 
我想在脚本中使用Internet服务提供商的名称,但我不知道该怎么做。 请帮助我,谢谢。 ...

1  如何在另一个应用程序运行时运行一个应用程序? [复制]  ( How can i run an application while another application is running ) 
这个问题在这里已经有答案了: 不阻止bash命令吗? (1个答案) 已关闭...

3  在bash脚本中,如何进入名称存储在变量中的目录? [复制]  ( In a bash script how can i go to a directory whose name is stored in a variable ) 
此问题已在此处提供答案: 为什么" cd" 在shell脚本中不起作用? (7个答案) ...

2  通过右键单击打开符号链接的父文件夹?  ( Open the parent folder of a symbolic link via right click ) 
我们可以使用之类的nautilus脚本打开任何文件的父文件夹。 #!/bin/bash nautilus "$1" 如果我在〜/ Desktop上的符号链接上执行此脚本,则它将打开桌面本身。 如何重新编码此脚本以打开绑定到实际文件符号链接的父级?例如,如果我有一个符号链接文件 Desktop/my-d...

1  lscpu的输出在间接调用时有所不同吗?  ( Lscpu output differs when called indirectly ) 
我使用 lscpu | grep 'MHz' 来获取时钟速度。根据调用此命令的方法,我得到了不同的结果。 方法1:在终端中键入 CPU MHz: 1200.000 方法2:将其封装在名为test.sh的脚本中 脚本代码: #! /bin/bash cpu=$(lscpu | grep 'MHz') echo...

25  Bash脚本出现问题:“声明:未找到”  ( Problem with bash script declare not found ) 
我有一个运行良好的脚本,但是当我今天运行它时,它显示为 declare: not found 。我正在使用bash shell,脚本开头的路径正确。 我的脚本中的两个标记行如下: declare -a RESPONSE RESPONSE=($RESULT) 它还说 ( 是意外的,但是我想这是因为第一个错误。...

6  我的bash函数在每个终端打开时仅运行一次  ( My bash function runs only once per terminal opened ) 
当我尝试在同一终端中第二次运行在.bashrc中定义的bash函数时,它不起作用。 代码如下: lspci6 我运行这个: lspci7 它转到〜/ mydirectory 好的,工作了。 但是我这样做: lspci8 什么也没发生。 ...

3  没有外壳的dpkg  ( Dpkg with no shell ) 
如何在没有外壳的情况下运行dpkg? 这是我的问题: 我在USB闪存盘中制作并运行了autorun.sh脚本。 要运行此脚本,我在 /etc/udev/rules/49-usb-rules 中创建了规则: SUBSYSTEM=="block", KERNEL=="sd*1", ACTION=="add", RUN...

1  使用sed在行尾添加字符会添加新行  ( Using sed to add characters at the end of a line adds a new line ) 
我正在编写一个脚本,将一些Magic卡组列表从一种格式转换为另一种格式。我需要在其所在行的末尾插入每个卡的设置代码。我的代码是: sed -i "$line_number""s/$/""|""$set_code"/ "$deck_file" 其中 $line_number 是文件中的一行, $set_cod...

2  用于按组列出用户的Shell脚本  ( Shell script for list of users by groups ) 
我想编写一个生成用户列表的shell脚本。为每个用户显示用户名和ID以及该用户所属的所有组 这意味着像GROUPS命令,但对于所有用户及其ID 我使用cat -d:-f1,3 / etc / passwd向用户显示其ID,但我不知道如何为每行使用组 请您帮我写这个脚本吗? 谢谢 ...

1  在脚本中为sudo指定密码  ( Specify password for sudo in script ) 
我正在制作一个脚本,该脚本将更新我的系统(并执行其他一些操作,但这无关紧要)。我希望脚本自动运行 sudo apt-get update 和 sudo apt-get dist-upgrade --yes 。我使用--yes,因此在运行时不必选择yes。它会自动升级所有软件包,而无需执行任何操作。就是说,我想以某种方...

1  管道分配的变量不起作用  ( Assigned variable for pipeline is not working ) 
我有一个Shell脚本来检查端口状态。检查端口是否繁忙后,将其杀死。 #check port and kill checkPort(){ check=$(sudo netstat -nlpt | grep 2020 | awk '{print $6}') word="LISTEN" k...

1  添加到网络共享时自动复制文件  ( Auto copy files when added to network share ) 
我的系统上有一个网络共享,绘图仪扫描仪将其扫描文件发送到该网络共享。如何编写脚本以将新添加的文件自动复制到另一个文件夹? ...

0  bash编程的不同阶段  ( Different stages in bash programming ) 
我有一个bash程序,具有不同的阶段,例如: $stage=1 if [ stage -le 1]; then echo "execute stage 1" fi if [ stage -le 2]; then echo "execute stage 2" fi if [ stage -le 3]; then ...

11  SSH连接后在服务器中自动运行脚本  ( Run scripts automatically in server after ssh connection ) 
在客户端系统与服务器建立ssh连接后,如何在服务器中自动运行脚本 例如: 假设用户将使用ssh连接从另一个系统(通过lan连接)登录到我的计算机。那时,应该在我的系统中自动运行一个脚本(python或shell)以执行一些验证吗? 如何在服务器系统中自动运行脚本? ...

94  显示所有终端颜色的脚本  ( Script to display all terminal colors ) 
在整个互联网上,我看到许多人使用脚本以 ~/.Xdefaults 中定义的所有颜色打印出一堆东西。但是,当我尝试使用这些代码时,总是得到 error: Bad Substitution 。有人有可以做同样事情的工作脚本吗? 它最终应该看起来像这样: ...

3  通过两个bash脚本进行通信  ( Communicating via two bash scripts ) 
因此,我应该为"猜我的号码" 游戏创建两个bash脚本。一种脚本是针对发牌人的,另一种脚本是针对玩家的。 每个脚本都应等待另一个脚本(通过文件)生成响应,然后再继续。因此,当播放器启动时,它首先需要等待经销商的响应。当检测到它时,玩家将获得经销商的响应并进行处理。当玩家做出猜测时,玩家会通过文件将其传达给经销商。 ...

5  我可以在Bash中调用.cpp程序吗?  ( Can i call a cpp program in bash ) 
我是Bash编程的新手。我想在Bash文件中调用我的C ++程序。 我的程序是 myProg.cpp : #include<iostream> using namespace std; int main() { cout<<"Salam! World"<<endl; return 0; } 我的ba...

0  Shell脚本以安装软件和配置网络  ( Shell script to install software configure network ) 
嘿,我想知道,如何在全新安装Ubuntu之后,使用外壳程序脚本安装所有必需的软件(vlc,apache,MySQL,PHP,java,Netbeansetc)。 我还希望使用相同的Shell脚本来配置我的静态网络IP,包括地址,网关,网络掩码&amp;用于IPv4的DNS服务器IP ... 可能吗? 不是不可能,对吧...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有