我想开始一个脚本的 n 个线程,每个线程都有自己的进程ID。
我目前通过cronjob
这样做:
* * * * * php /path/to/script.php >> /log/script.log 2>&1
* * * * * php /path/to/script.php >> /log/script.log 2>&1
* * * * * php /path/to/script.php >> /log/script.log 2>&1
这三个线程中的每一个都记录到相同的script.log
,它将输出与其pid
配对。
如果没有从脚本中复制/粘贴,我怎么能这样做呢?
以下是否会使用不同的pid
(可从php
getmypid()
访问)生成每个{?}}?或者他们都会共享相同的script-launcher.sh
pid?
#!/bin/bash
# Let's call this `script-launcher.sh`
# Launch 3 threads at once with `script-launcher.sh 3`
N=${1-0}
for i in {1..$N}
do
php /path/to/script.php >> /log/script.log 2>&1
done
答案 0 :(得分:1)
每当您跨越新流程时,新流程都会获得新的pid。所以在这种情况下,每次你的shell脚本跨越一个php的实例时,每个php的副本都有自己的pid。
{1 .. $ N}语法不起作用,因此您需要将脚本更改为
N=${1-0}
for i in $(seq 1 $N)
do
php /path/to/script.php >> script.log 2>&1
done
然后,如果您将脚本调用为script-launcher.sh 42
,则会运行42个PHP实例。
要让你的php脚本在后台运行(异步),请使用&
指示bash:
php /path/to/script.php >> script.log 2>&1 &