使用shell脚本在系统引导时启动pm2进程

使用shell脚本在系统引导时启动pm2进程,shell,pm2,Shell,Pm2,我正在研究如何编写一个SHELL脚本: 将工作目录更改为目录路径/to/dir/A 然后获取目录path/to/dir/A/X中的所有.js文件 并使用此命令pm2 start{files in directory A}逐个迭代所有这些文件 我不熟悉SHELL脚本,因此欢迎提供任何帮助。 要添加的是,这些文件是pm2配置文件,用于启动不同的进程。每个进程都有自己的文件。因此,需要对所有这些问题进行迭代。我不确定问题中的X是什么,但看到您如何接受忽略X的答案,下面是我的解决方案: DIR="A"

我正在研究如何编写一个SHELL脚本:

将工作目录更改为目录路径/to/dir/A 然后获取目录path/to/dir/A/X中的所有.js文件 并使用此命令pm2 start{files in directory A}逐个迭代所有这些文件 我不熟悉SHELL脚本,因此欢迎提供任何帮助。 要添加的是,这些文件是pm2配置文件,用于启动不同的进程。每个进程都有自己的文件。因此,需要对所有这些问题进行迭代。

我不确定问题中的X是什么,但看到您如何接受忽略X的答案,下面是我的解决方案:

DIR="A"
cd "$DIR";
ls "$DIR/*.js" >/tmp/list
(while read f; do
pm2 start "$DIR/$f"
done) </tmp/list
rm /tmp/list
for fname in /path/to/A/*.js; do
    pm2 start "$fname"
done
这只是在一个glob上循环,扩展到一个文件中的所有.js文件,并在这些文件上运行pm2start

如果流程需要从特定目录启动,则必须将cd插入其中。对问题进行编辑后:

cd /path/to/A
for fname in X/*.js; do
    pm2 start "$fname"
done

谢谢虽然它应该从X目录获取.js文件,但在您编辑ans后,它将接受。我认为这不起作用,而且它也不符合最佳实践。它不起作用,因为*.js被引用了,所以它会查找一个名为*.js的文件。然后,您不需要临时文件。当逐行阅读时,您应该使用IFS=read-r来避免反斜杠解释和空格混乱。为什么while循环在子shell中?您不应该以编程方式处理ls的输出。此外,由于您将cd放入,当您调用pm2 start$DIR/$f相对路径时,pm2将看到路径/path/to/A/A/$f。我不知道这是怎么回事。X目录是什么?获取.js文件是什么意思?把它们复制到一个地方?我还是不明白。第2步具体做什么?在目录A中.js文件在它们自己的目录中。第2步和第3步是相同的,您希望将其cd到A中,然后循环到A/X/*.js中的文件?在我接受ans后进行了编辑。原始ans是正确的,解决了我的问题,即使它没有考虑到最好的practices@PlatinumIndustries我不认为编辑在功能上会改变任何东西,它只是将目录作为一个参数。如果路径有空格呢?引用它:对于'/path/has space/to/a/'*.js中的fname,有没有办法改变pm2的工作目录?