【发布时间】:2013-07-16 20:27:58
【问题描述】:
我有一个简单的 python 脚本,我需要启动和停止,我需要使用 start.sh 和 stop.sh 脚本来完成它。
我有 start.sh:
#!/bin/sh
script='/path/to/my/script.py'
echo 'starting $script with nohup'
nohup /usr/bin/python $script &
和 stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
我主要关心 stop.sh 脚本。我认为这是找到 pid 的合适方法,但我不会在这上面下太多赌注。 start.sh 成功启动它。当我运行 stop.sh 时,我无法再通过"ps aux | grep 'myscript.py'" 找到该进程,但控制台输出:
killing 25052
25058
./stop.sh: 5: kill: No such process
所以它似乎有效并且给出了“没有这样的过程”的各种错误。
这真的是一个错误吗?我是否以理智的方式处理这个问题?还有其他我应该注意的事情吗?
EDIT - 实际上我最终得到了这样的结果: 开始.sh
#!/bin/bash
ENVT=$1
COMPONENTS=$2
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
PID=$(ps aux | grep -v grep | grep $target | awk '{print $2}')
echo $PID
if [[ -z "$PID" ]]
then
echo "starting $target with nohup for env't: $ENVT"
nohup python $target $ENVT $COMPONENTS &
fi
done
stop.sh
#!/bin/bash
ENVT=$1
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
pkill -f $target
echo "killing process $target"
done
【问题讨论】:
-
可以通过
$!获取上一条命令的PID。然后你可以在stop.sh文件中使用它。你也没有什么可以处理多次启动等问题。