linux - 命令输出、管道、脚本联动

标签 linux bash ubuntu

我正在编写一个小脚本来重启我的 lighttpd 服务器: 1. kill已经运行的进程 2. 启动新服务器

脚本如下:

PID=$(ps aux | grep lighttpd | grep -v grep | cut -c9-15) 
kill $PID
sudo lighttpd -f /etc/lighttpd/lighttpd.conf

我的问题是在终端窗口中的命令

ps aux | grep lighttpd | grep -v grep | cut -c9-15

给出结果:11685 但如果它在 shell 脚本中运行则结果为 11685 13339 13340

我在这里错过了什么?

包含 lighttpd 作业的行的 ps 输出是 <强>根 11685 0.0 0.0 11096 1960 ? S 16:40 0:00 lighttpd -f/etc/lighttpd/lighttpd.conf

最佳答案

为什么你在 Linux/unix 中浪费时间来 grepping PID 并在你有 killall 命令时杀死它

/usr/bin/killall

可以直接

killall lighttpd/usr/bin/killall lighttpd

如果不是 super 用户则使用 sudo

sudo killall lighttpdsudo/usr/bin/killall lighttpd

最好将 -9killall 一起使用,就像在您的情况下是 sudo killall lighttpd

然后通过

重新启动它

sudo lighttpd -f/etc/lighttpd/lighttpd.conf

如果您正在寻找完全自动化的脚本,请使用 except 命令 Click here

关于linux - 命令输出、管道、脚本联动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861451/

相关文章:

linux - Linux 中的 MP3 重采样

string - 连接所有参数并用双引号引起来

bash - 为什么我不在 bash 中启用 extglob?

apache - 使用 app/webroot 在 CakePHP 中将非 www 重定向到 www

linux - curl 并检查 403 错误代码

c++ - 有没有办法在 Linux 上用 C++ 原子地刷新二进制信号量?

regex - 使用 "grep -n"和 echo : : double backslash interpreted

python - 将二进制字符串 (ASCII) 转换为二进制文件

windows - 当我在同一系统中使用 Ubuntu/Windows 时,如何配置 Skype 以保持相同的历史记录位置?

c - 有效的 UID 未按预期运行