服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

需要一个脚本/批处理/程序运行一个命令,当父母死亡时不会被杀死

场景 我使用Zabbix监视我的服务器,最近我想为Windows添加更多的指标。 出于安全考虑,我使用了Zabbix的用户参数function,但是它将外部命令的执行限制在3秒左右。 之后,命令被强行杀害。 我想运行一些长时间运行的命令,所以我使用了Zabbix论坛的技巧:在后台运行命令,将结果写入文件并使用Zabbix来收集它们。 在* nix下,这很容易得益于“&”运算符,但在Windows的shell中没有这种支持。 更糟糕的是,当Zabbix杀死强行杀死它用来评估命令的cmd.exe时,所有subprocess都会死掉,包括未完成的后台任务。 因此,我需要一些可以切断与子女关系的东西,这样他们就不会受到级联杀手的影响。 我试过了 start和start /B – 他们什么都不做,因为孩子总是与父母一起死亡 在StackOverflow invis.vbs WScript.Shell.Run – 有时工作。 如果这个过程被强行杀死,而不是自己戒烟,孩子们也会死亡。 hstart – 与hstart类似的结果 At命令 – 这要求你设置一个绝对时间来运行任务,而不是一个偏移量,所以代码将是相当混乱的,由于Windows的shell脚本function有限。 (编辑) PsExec.exe套件中的PsExec.exe – 它使用一个服务来启动命令,所以它不受kill的影响; 然而,它打印一些横幅和日志信息到StdErr,并没有开关来禁用这个。 当我使用2>NULredirect它们时,Zabbix报告一个错误。 在尝试上述不同的组合后,我注意到,如果我从invis.vbs调用hstart ,当invis.vbs被invis.vbs ,由前者启动的命令将作为无父进程invis.vbs 。 但是,由于我需要redirect输出,我想运行的命令总是以cmd.exe /c ""command" "args"" >log 。 vbs也删除所有的引号,所以我必须用自定义的转义序列对命令进行编码。 最终结果大概涉及五级逃逸/引用,这几乎是不可能维持的。 任何人都知道更好的解决办法 一些要求 任何bat / vbs / js / Win32二进制文件都可以接受 最好不要求多层次的逃跑 没有.Net(包括PowerShell),因为它没有安装