我使用rsnapshot执行备份,该备份创建一个带有进程pid的锁定文件。现在我想从rsnapshots备份中进行备份,所以我正在寻找一种方法来为第二个/外部备份创建此锁定文件。获取shell脚本的pid并将其保存到锁定文件中
shell脚本应该是这样的:
- 检查是否存在锁文件,如果是稍候再试(i'm用,而真正的循环这样做)
- 得到这个壳的PID脚本,并将其保存为rsnapshot锁文件
- 启动第二/外部备份
- 删除文件锁
我怎样才能得到ŧ他PID并将其保存为rsnapshot lockfile?
我使用rsnapshot执行备份,该备份创建一个带有进程pid的锁定文件。现在我想从rsnapshots备份中进行备份,所以我正在寻找一种方法来为第二个/外部备份创建此锁定文件。获取shell脚本的pid并将其保存到锁定文件中
shell脚本应该是这样的:
我怎样才能得到ŧ他PID并将其保存为rsnapshot lockfile?
对于任何应用程序,可以使用Unix外壳本身查找其进程ID,用ps。下面的例子是来自ps的非常简化的列表。 PS会告诉你不仅PID,而且车主,以及父进程ID(如在进程启动这一具体过程。)
userX# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Oct19 ? 00:00:00 /sbin/init
root 2 0 0 Oct19 ? 00:00:00 [kthreadd]
root 3 2 0 Oct19 ? 00:00:02 [migration/0]
root 4 2 0 Oct19 ? 00:04:48 [ksoftirqd/0]
root 5 2 0 Oct19 ? 00:00:00 [migration/0]
root 6 2 0 Oct19 ? 00:00:00 [watchdog/0]
...
root 27 2 0 Oct19 ? 00:00:00 [pm]
root 28 2 0 Oct19 ? 00:00:00 rsnapshot
root 29 2 0 Oct19 ? 00:00:00 [xenbus]
现在让我们开始发现其过程是让我们感兴趣。我不熟悉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
如果没有PID为rsnapshot存在,那么就没有输出。作为writtent,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,那么没有命令可以运行。
你可以看一下[lockfile](http://linux.die.net/man/1/lockfile)命令,它会帮助你的第一步 – David