【问题标题】:Simple BASH script to start Redis sentinel启动 Redis sentinel 的简单 BASH 脚本
【发布时间】:2015-07-06 19:24:30
【问题描述】:

我有这个简单的脚本来尝试启动 3 个不同的 Redis Sentinel 进程来监控主/从 Redis 进程:

# (attempts to run 3 sentinel processes from one script)
    redis-sentinel /usr/local/redis/sentinel-26379.conf
    redis-sentinel /usr/local/redis/sentinel-26380.conf
    redis-sentinel /usr/local/redis/sentinel-26381.conf
# end

当然,这实际上不会启动 3 个单独的进程 - 它只会在终端窗口中运行第一个命令,而不会运行后两个命令。我可以在一个脚本的不同窗口中运行所有 3 个命令的最佳方法是什么? (我还想从同一个脚本中运行一些其他命令,但我想保持简单,例如。)

我在 Mac OSX 上使用 iTerm2。

【问题讨论】:

  • 那么,您不仅想要并行进程,还想要专用的窗口/屏幕?
  • 不,我很喜欢并行进程,我不需要单独的窗口
  • 一种方法是使用applescript,但这可能不是最简单的方法
  • 只需在每个命令的末尾附加一个&,每个进程都会进入后台。

标签: bash shell redis-sentinel


【解决方案1】:

bash 提供job control,这意味着您可以在后台同时运行多个作业。使用&在后台启动进程:

redis-sentinel /usr/local/redis/sentinel-26379.conf &
redis-sentinel /usr/local/redis/sentinel-26380.conf &
redis-sentinel /usr/local/redis/sentinel-26381.conf &

如果你输入

jobs

您将获得正在运行的作业列表。请注意,所有作业都会将其输出写入同一终端。我想这就是你真正想要的。

如果您真的想在不同的窗口中启动该进程,您需要从您的脚本启动三个终端并将redis-sentinel 命令设置为它们的初始命令。我不知道 OSX 上的iTerm,但我几乎 100% 确定它提供了这样的功能。对于 gnome-terminal,它看起来像这样:

 gnome-terminal -e 'redis-sentinel /usr/local/redis/sentinel-26379.conf' &

查看手册页以获得iTerm 的正确选项。

【讨论】:

  • 这很好用,但还有一个问题要问你 - 我如何用一个命令杀死/关闭所有这些工作 - 我必须执行“ps auxww | grep -i redis”才能看到所有进程以便一一杀死它们。有没有办法彻底杀死它们?
  • also "$> jobs" 和 "$> sudo bash jobs" 没有做任何事情,但您的主要建议似乎效果很好
  • 更具体地说,jobs 命令确实有效,但即使我打开一个新的终端窗口,它也没有返回任何内容(甚至没有“空列表”)。 "$> jobs -l" 也没有列出任何内容。很奇怪。
  • 您可以使用它的作业 ID 终止作业,例如 kill %1.. 这是您想知道的吗?
  • 我建议安装 GNU bash。默认的 OSX shell 已经很老了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 2020-09-24
  • 2020-09-05
  • 1970-01-01
  • 2020-09-27
相关资源
最近更新 更多