从bash脚本运行一些命令

Mas*_*oor 2 linux bash process

我认为这应该是直截了当的,但结果令我感到困惑.

当我使用命令运行bash脚本时,

sudo ./restartccpd.bash
Run Code Online (Sandbox Code Playgroud)

屏幕上没有任何内容.也是问题

sudo /etc/init.d/ccpd status
Run Code Online (Sandbox Code Playgroud)

运行脚本后独立于屏幕产生空,而不是显示守护进程的pid.这证明只有pkill命令正在工作.

脚本的内容是,

#!/bin/bash

sudo pkill -9 ccpd
sudo /etc/init.d/ccpd start
sudo /etc/init.d/ccpd status
Run Code Online (Sandbox Code Playgroud)

从终端运行时,命令工作正常.但是当作为脚本运行时,如上所述,它没有按预期工作.

我尝试在命令之间插入sleep命令,但没有任何效果.此外,syslog中没有任何内容.所以,我无法诊断问题.

任何建议将不胜感激.

lar*_*sks 6

pkill将杀死ccpd命令名称中包含的任何内容.你的脚本被调用restartccpd.bash.第一行是:

pkill ccpd
Run Code Online (Sandbox Code Playgroud)

因此脚本启动,运行pkill(不产生输出)并立即杀死自己.塔达!

最简单的解决方案是重命名脚本.你也可以这样做:

kill $(pgrep -l ccpd | grep -v restartccpd | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)

这将生成一个进程名称和pid匹配列表,然后从列表中ccpd删除restartccpd,然后使用该进程终止进程kill.