如何确保一个 Linux Shell 只有一个运行实例

当我们在 Linux 下写了一个 Shell 做某些操作时,可能在一个终端运行了该脚本还没停止,然而又可能在另一个终端再一次执行了它,会有两个或多个实例在运行。或者是把这个 Shell 安排在 Cron 中,想让它每隔5分钟执行一次,有可能执行时间较长,正在执行当中,下一个5分钟的时刻到了,又在启动一次,这同样也会造成同一个 Shell会同时跑出多个实例来。

同时跑的多个实例就有可能对同一资源的操作造成数据的不可思异。这就要有一种方法来保证同一时刻同一脚本只能有一个实例在运行,借用很多软件的做法,比如 MySQL、Apache 等,在启动的时候生成一个临时的文件向后来者明确指示:有一个实例正在执行,不能执行第二个实例了。等到执行结束(可能被 Kill掉,被 Shutdown等),就把临时文件删除,以后可以运行新的实例了。

可以把某个 Shell 的执行权当作一个独占资源,只有获取锁(没有临时文件,并且建立它)时才有权执行它,执行完后释放锁(把临时文件删除)。 阅读全文 >>

Linux/Unix下定时任务系统--cron和crontab(拼凑)

在 Linux 中,任务可以被配置在指定的时间段、指定的日期、或系统平均载量低于指定的数量时自动运行。红帽企业 Linux 预配置了对重要系统任务的运行,以便使系统能够时时被更新。譬如,被 locate 命令使用的 slocate 数据库每日都被更新。系统管理员可使用自动化的任务来执行定期备份、监控系统、运行定制脚本等等。

红帽企业 Linux 随带几个自动化任务的工具:cronat、和 batch阅读全文 >>