在后台启动进程并从bash脚本修改它

时间:2012-06-14 06:47:48

标签: linux bash

我正在创建一个bash脚本,它将在后台运行一个进程,从而创建一个套接字文件。然后套接字文件需要chmod'd。我遇到的问题是在尝试chmod文件之前没有创建套接字文件。

示例来源:

#!/bin/bash

# first create folder that will hold socket file
mkdir /tmp/myproc
# now run process in background that generates the socket file
node ../main.js &
# finally chmod the thing
chmod /tmp/myproc/*.sock

如何在创建套接字文件之前延迟chmod的执行?

3 个答案:

答案 0 :(得分:2)

我知道这样做的最简单方法是忙于等待文件出现。方便的是,ls在要求列出的文件不存在时返回非零值;所以只需循环ls直到它返回0,当它确实你知道你至少有一个*.sock文件到chmod。

#!/bin/sh
echo -n "Waiting for socket to open.."
( while [ ! $(ls /tmp/myproc/*.sock) ]; do
  echo -n "."
  sleep 2
done ) 2> /dev/null
echo ". Found"

如果这是你需要做的不止一次将它包装在一个函数中,但除此之外应该做你需要的。

编辑:

正如评论中指出的那样,在测试中使用这样的ls不如-e,因此下面的重写脚本是首选。 (我还更正了shell调用,因为在仿真模式下所有平台都不支持-n。)

#!/bin/bash
echo -n "Waiting for socket to open.."
while [ ! -e /tmp/myproc/*.sock ]; do
  echo -n "."
  sleep 2
done
echo ". Found"

答案 1 :(得分:1)

在继续之前测试文件是否存在:

while [[ ! -e filename ]]
do
    sleep 1
done

答案 2 :(得分:1)

如果您设置umask(尝试umask 0),则根本不需要chmod。如果仍然没有获得正确的权限,请检查节点是否有更改权限的选项。