Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用ansible检查文件中的序列_Shell_Ansible - Fatal编程技术网

Shell 使用ansible检查文件中的序列

Shell 使用ansible检查文件中的序列,shell,ansible,Shell,Ansible,我写ansible playbook是为了在文件中查找特定文本。它在2000秒内寻找该模式,然后退出 - name: check if keyword exist shell: cmd: | sh -c "tail -n 100 -f play.txt | {sed '/@@@@/ q' && kill $$; }" async: 2000 register: hi failed_when: not hi.changed 现在

我写ansible playbook是为了在文件中查找特定文本。它在2000秒内寻找该模式,然后退出

- name: check if keyword exist
  shell: 
  cmd: |
     sh -c "tail -n 100 -f play.txt | {sed '/@@@@/ q' && kill $$; }"
  async: 2000
  register: hi
  failed_when: not hi.changed
现在,我想让我的游戏在1000秒后(前2000秒)检查另一个模式,如果该模式存在,则失败

但我不确定在第一个任务进行1000秒后如何检查第二个模式


在ansible中可能吗?

理论上,您可以在ansible中创建一些异步任务,并编写某种“池管理器”播放来检查它们的状态,但这将是对该工具的严重滥用

Ansible不是为编程而设计的。如果你需要一些逻辑(你想写的东西肯定充满了自定义逻辑),最好使用外部工具

Ansible适用于定义系统的幂等状态(以及如何创建此状态的说明)。一旦你开始写其他的东西,你就使用了专门的工具来做错误的工作


所以,答案是,可以,不可以。

非常感谢您的回答。我有一个问题,所以,当轮询保持为0时,异步模块用于并行运行任务。那么,这是否意味着如果我有3个任务,并且task1以异步方式运行,那么一旦触发taks1,控制器将转到task2并开始运行,然后再转到task3。另一件事,如果我保持异步到3分钟,我的执行会在3分钟后停止吗?异步任务独立于控制器运行。它几乎是“开火并忘记”,但没有“忘记”(你仍然有JID来查询状态)。您可以使用Ansible并行运行多个异步任务,但实际上无法管理它们。因此,让10个异步任务执行一些缓慢的操作(下载10G映像、运行硬盘安全擦除等)是完全可以的,但尝试根据这些任务及其状态创建自定义逻辑是不好的。