2013-10-20 59 views
3

我使用rsnapshot执行备份,该备份创建一个带有进程pid的锁定文件。现在我想从rsnapshots备份中进行备份,所以我正在寻找一种方法来为第二个/外部备份创建此锁定文件。获取shell脚本的pid并将其保存到锁定文件中

shell脚本应该是这样的:

  1. 检查是否存在锁文件,如果是稍候再试(i'm用,而真正的循环这样做)
  2. 得到这个壳的PID脚本,并将其保存为rsnapshot锁文件
  3. 启动第二/外部备份
  4. 删除文件锁

我怎样才能得到ŧ他PID并将其保存为rsnapshot lockfile?

+0

你可以看一下[lockfile](http://linux.die.net/man/1/lockfile)命令,它会帮助你的第一步 – David

回答

6

该PID被存储在$$

喜欢

echo $$ > thisscriptpidfile 
+0

好的,谢谢.. – user2693017

+0

如果进程在背景它不起作用 – giuseppe

2

对于任何应用程序,可以使用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,那么没有命令可以运行。

相关问题