【问题标题】:Multiple sequential exec tasks in a single bash script单个 bash 脚本中的多个顺序执行任务
【发布时间】:2015-02-12 00:06:19
【问题描述】:

我正在尝试在由 php 脚本触发的 bash 脚本中运行以下两个任务。当我注释掉另一个时,这两个都正确执行,所以这显然是我错误地布置了完整工作的方式。

它们应该按顺序运行,而不是并行运行,因此第一个 exec 需要在第二个开始之前完成...

我还应该注意,变量是从触发它的 php 脚本传递的(如果它是相关的)。

#!/bin/bash

Udata1=$1
Udata2=$2

#Encode incoming audio file to 128k MP3 using avconv
exec avconv - i /var/www/html/tracks/$Udata1/$Udata2 -ab 128k /var/www/html/tracks/$Udata1/serve/$Udata2.128k.mp3;

#Encode 128k MP3 generated above to WAV using avconv
exec avconv -i /var/www/html/tracks/$Udata1/serve/$Udata2.128k.mp3 /varwww/html/dump/$Udata2.wav

exit;

我想我最终要问的是如何在同一个 .sh 脚本中运行多个 exec?

【问题讨论】:

  • a bash script being triggered from a php script 请确保您非常了解这样做的安全隐患。
  • 是的,我完全知道谢谢。触发这个的 php 是通过一个完全不同的 php 页面上的包含调用的。这不像只是坐在网络服务器上供访问者点击。当然知道他们在做什么和寻找的人可能会违反它,但任何网站都不是这样吗?不过,我很感谢您的建议。
  • 将 PHP 配置为允许其执行操作系统进程远不如将其配置为不安全。在这种情况下,我通常设置一个标志(在数据库、文件系统等中酌情设置)或将某些内容推送到消息队列以触发外部进程运行,而不是直接启动进程。
  • 这是个聪明的主意,没想到。有点像 cron 作业,等待某事告诉它运行?
  • cron 是一个很好的方法。

标签: php bash exec avconv


【解决方案1】:

exec 用生成的进程替换当前运行的进程。它永远不会回来。你不能exec 两件事。

也就是说你不需要。只需从这两行中删除exec,它应该可以正常工作。

【讨论】:

  • 砰! :) 好的,所以你今天教了我一些重要的东西!非常感谢伊坦!如果我也要在同一个脚本中混合运行不同的程序,这同样适用吗?
  • 是的。你跑什么并不重要。命令是一个命令,它会阻止脚本直到它完成,除非你把它放在后台或者它把自己放在后台。
  • 我确实认为命令在运行时会按顺序阻止脚本,但能得到确认真是太好了!谢谢人;)
猜你喜欢
  • 2018-12-14
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2019-08-28
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多