Linux 获取shell脚本的pid并将其保存到锁文件中
我使用rsnapshot进行备份,它创建了一个包含进程pid的锁文件。现在我想从rsnapshots备份中创建一个备份,因此我正在寻找一种方法来为第二个/外部备份创建这个锁文件 shell脚本应该如下所示:Linux 获取shell脚本的pid并将其保存到锁文件中,linux,bash,shell,pid,lockfile,Linux,Bash,Shell,Pid,Lockfile,我使用rsnapshot进行备份,它创建了一个包含进程pid的锁文件。现在我想从rsnapshots备份中创建一个备份,因此我正在寻找一种方法来为第二个/外部备份创建这个锁文件 shell脚本应该如下所示: 检查锁文件是否存在,如果存在,请等待并重试(我使用while true循环执行此操作) 获取此shell脚本的pid并将其保存为rsnapshot锁文件 启动第二个/外部备份 删除锁定文件 如何获取PID并将其保存为rsnapshot锁定文件?PID存储在$$ 像 对于任何应用程序,您都可以
如何获取PID并将其保存为rsnapshot锁定文件?PID存储在
$$
像
对于任何应用程序,您都可以使用Unix shell本身,使用ps来查找其进程ID。下面的示例是ps中的一个非常简化的列表。ps不仅会显示PID,还会显示所有者以及父进程ID(如启动此特定进程的进程) 现在让我们开始寻找我们感兴趣的过程。我不熟悉rsnapshot,所以我在示例中使用了虚拟数据
userX# ps -ef | grep rsnapshot
root 28 2 0 Oct19 ? 00:00:00 rsnapshot
ec2-user 7233 1497 0 11:32 pts/0 00:00:00 grep rsnapshot
请注意,由于grep,它不会提供“标题”信息,只提供匹配的行。
您的第二个“列”是PID。值得注意的是:ps显示了每个进程,包括您刚才运行的grep。您的命令/脚本需要对此保持警惕,并去掉这些项目。我将在下一个示例中使用awk来实现这一点
现在进一步展开,将PID放入一个文件中。我们需要确认是否有PID,如果有,请创建命令以创建锁文件:
userX# ps -ef | grep rsnapshot | awk '$0!~/grep/ && $2~/[0-9]/{print "echo "$2" > rsnapshot.lck"}'
echo 28 > rsnapshot.lck
如果不存在rsnapshot的PID,则不会有输出。作为writent,awk将检查每一行,如果它不包含字符串“grep”,并且第二个字段中有任何数字[0-9],则打印要运行的命令,但不实际运行该命令
最后一步是从awk输出调用该命令
userX# ps -ef | grep rsnapshot | awk '$0!~/grep/ && $2~/[0-9]/{print "echo "$2" > rsnapshot.lck"}' | sh
添加“|sh”将导致所有输出作为命令调用。如果awk没有找到rsnapshot,则没有要运行的命令。您可以查看该命令,它将帮助您完成第一步
userX# ps -ef | grep rsnapshot | awk '$0!~/grep/ && $2~/[0-9]/{print "echo "$2" > rsnapshot.lck"}'
echo 28 > rsnapshot.lck
userX# ps -ef | grep rsnapshot | awk '$0!~/grep/ && $2~/[0-9]/{print "echo "$2" > rsnapshot.lck"}' | sh