从 shell 脚本启动时使 redis 服务器忽略 Ctrl+C

克里斯

我想使用 shell 脚本启动 Redis 服务器,然后监视日志文件:

#!/bin/bash
/path/to/redis/src/redis-server &
tail -f /path/to/log/logfile.log

如果我运行此脚本并从终端按 Ctrl+C,则tail -f终止,这正是我想要的,但是 Redis 也检测到 SIGINT 并退出。

我试着写这样的脚本:

 #!/bin/bash
 trap '' INT TSTP
 ~/redis/src/redis-server &
 tail -f ./script1

这一次事情变得更糟,tail -f拒绝终止而 Redis仍然检测到 SIGINT 并退出。

似乎在忽略信号方面存在一些特定于 Redis 的问题。

我的目标是tail -f在使 Redis 忽略此信号的同时响应 Ctrl+C。

请任何人告诉我这是否可以实现,如果可以,请给我一些建议?

马克·普洛特尼克

redis-server捕获SIGINT( Ctrl+C),即使SIGINT被忽略。这是一个不寻常的选择;SIGINT如果它已经被忽略,大多数软件都会检查并且不会捕获

当它收到时SIGINT,它保存数据库并关闭。

如果您将其作为服务启动,则它根本不会与任何终端关联,也不会看到Ctrl+C您键入的任何内容。

如果您在交互式 shell 中将其作为后台作业启动:

$ /path/to/redis/src/redis-server &

您的 shell 会将其放入与终端进程组不同的进程组中,并且键入Ctrl+C不会影响它。(如果你用 把它带到前台fgCtrl+C将发送SIGINT到程序)。

但是,当您运行这样的脚本时:

#!/bin/bash
/path/to/redis/src/redis-server &
tail -f /path/to/log/logfile.log

运行脚本的 shell 将是非交互式的,并且它在后台启动的任何程序(带有&)都将与 shell 在同一个进程组中。因此,如果您在前台运行该 shell 脚本,则键入Ctrl+C将发送SIGINT到 shell、 toredis-server和 to tail

为了防止在这种情况下Ctrl+C发送SIGINTredis-server,您需要放入redis-server自己的进程组或将其与终端断开关联。你可以用 来做到这一点setsid,它可以同时做到

#!/bin/bash
setsid /path/to/redis/src/redis-server &
tail -f /path/to/log/logfile.log

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Kafka服务器在按CTRL + c时关闭

来自分类Dev

Shell脚本启动服务器并返回

来自分类Dev

启动时Shell脚本覆盖日志

来自分类Dev

启动时通过脚本运行Web服务器

来自分类Dev

Ctrl-C并不总是终止shell脚本

来自分类Dev

使用gulp启动Redis服务器

来自分类Dev

在Appveyor上启动Redis服务器

来自分类Dev

无法启动 Redis 集群服务器

来自分类Dev

Redis服务器的监视脚本

来自分类Dev

Shell脚本启动/停止tomcat服务器

来自分类Dev

为Redis服务器执行lua脚本时出错

来自分类Dev

Ctrl + C时如何在shell脚本中杀死并等待后台进程完成?

来自分类Dev

无法使用CTRL-C停止Rails服务器

来自分类Dev

Shell脚本问题:cron作业脚本,在意外停止时重新启动MySQL服务器

来自分类Dev

Shell脚本问题:cron作业脚本,在意外停止时重新启动MySQL服务器

来自分类Dev

NoReverseMatch 在服务器启动时/

来自分类Dev

如何在启动时自动运行Shell脚本?

来自分类Dev

如何使Shell脚本在重新启动时正确执行

来自分类Dev

c# - 当服务器关闭时忽略客户端的异常

来自分类Dev

如何使Lubuntu在启动时自动运行Minecraft服务器脚本?

来自分类Dev

如何使Lubuntu在启动时自动运行Minecraft服务器脚本?

来自分类Dev

如何在服务器启动时在tmux中运行我的脚本

来自分类Dev

Discourse 服务器启动失败,出现与redis相关的错误

来自分类Dev

如何成功启动`redis-sentinel`服务器

来自分类Dev

无法使用Ctrl + c终止Shell命令

来自分类Dev

如何在启动时启动VNC服务器?

来自分类Dev

Tomcat7在服务器启动时启动

来自分类Dev

启动时自动启动VNC服务器

来自分类Dev

Tomcat在服务器启动时无法启动

Related 相关文章

热门标签

归档