我有一堆 redis 服务实例,我想在命令的输出中为它们添加一个标签ps
。目前我看到:
$ ps aux | grep redis
root <snipped> /usr/local/bin/redis-server *:6381
root <snipped> /usr/local/bin/redis-server *:6380
有没有办法得到这样的输出:
root <snipped> /usr/local/bin/redis-server *:6381 item cache # <== label
root <snipped> /usr/local/bin/redis-server *:6380 page cache # <== label
即添加文本标签以轻松识别每个实例的用途。
有没有办法做到这一点,而不必复制二进制文件?
答案1
假设redis-server
没有内置支持在启动后更改自己的命令名称(某些程序,尤其是守护进程,确实有这样的支持),您可以执行以下操作:
使用备用命令名称。
尽管命令行 (
argv[0]
) 中的第一个参数通常是用于调用命令的二进制文件的名称(其完整路径名或其基本名称),但并非必须如此。如果不是,那么应用程序本身可能不会注意到或关心。但是 shell 会按照此约定启动带有 set 的命令argv[0]
,因此您必须以“特殊”方式启动它。为此,您可能需要修改
/etc/init.d
启动此守护程序的脚本。建立到二进制文件的硬链接并启动它们。这与您复制二进制文件的建议类似,但副本是不必要的。如果使用硬链接,二进制文件将不会占用任何额外的磁盘空间,并且多个实例的代码(文本)将全部共享内存,而副本不会发生这种情况。