检查符号链接是否已更改

时间:2010-06-04 22:27:24

标签: bash conventions symlink

我有一个守护进程,当它启动时,从恰好是符号链接的目录加载其数据。定期生成新数据并更新符号链接。我想要一个bash脚本来检查当前的符号链接是否与旧的符号链接(守护进程启动时)相同,如果没有,则重启守护进程。我目前的想法是:

if [[ ! -e $old_dir || $(readlink "$data_dir") == $(readlink "$old_dir") ]];
then
  echo restart
  ...
  ln "$(readlink "$data_dir")" "$old_dir" -sf
else
  echo no restart
fi

抽象要求是:每次脚本运行时,都需要检查给定路径上的符号链接现在是否指向上次以外的其他内容,如果是,则执行某些操作。 (另一种方法是检查路径上的数据是否已经改变,但我没有看到更清洁。) 我的问题:

  • 这是一个好方法吗?
  • 有没有人有更好的主意?
  • 我应该为$old_dir使用什么,我应该把符号链接放在哪里?

2 个答案:

答案 0 :(得分:1)

至于一个好方法,我不确定。似乎很多可行但很奇怪。

我将old_dir放在/ var / local / projectname

编辑:如果没有足够真实地知道是否引导你走错了路,我会认为正确的方法是使用假脱机目录。

这种方式的工作原理是:

  1. 在/ var / spool / appname / tmp。
  2. 中创建新的工作文件
  3. 文件被移动到/ var / spool / appname(需要相同的文件系统)
  4. 文件从/ var / spool / appname中获取,处理和删除(如果更合适,则移动)
  5. 第2步是原子越区切换。步骤3可能必须装甲,因此两次处理同一文件是无害的。

    然后再说一次,如果你在这里有一些东西,比如保留一个完整的历史记录,那么符号链接指的是当前你正在做的事情。

答案 1 :(得分:0)

您的脚本需要知道原始$old_dir应该是什么。您可以将值存储在/var/run/app_name中的文件中。

我仍然不清楚你为什么要这样做。遗憾。

修改

根据文件系统层次结构标准,我会说/var/lib/appname可能是放置符号链接的合适位置。