Shell功能
脚本获取域名的IP地址
自动检测公网IP地址并更新到公云PubYun
获取公网IP地址的多种方式
深入理解 Bash 中的管道与子 Shell:防止常见陷阱
CentOS和Ubuntu的Shell兼容点
主机之间ping命令检测
脚本匹配ip地址正则表达式
CentOS 7.x系统三级等保规范脚本
Shell数值计算的几种方法
脚本单实例运行的进程锁
主机通过客户端实时上传本地文件到对象存储
执行命令前关闭history记录
Bash中的变量声明与处理
sed:使用正则匹配IP地址
sed: 匹配并在中间位置插入字符
Find排除多个目录并按多个后缀查找文件
Linux主机巡检脚本
增加CPU使用率到指定范围
本文档使用 MrDoc 发布
-
+
home page
脚本单实例运行的进程锁
脚本实现了一个简单的进程锁机制,以确保同一时间只有一个实例可以运行。 ```bash #!/usr/bin/env bash LOCKFILE=/var/lock/script.lock # 判断运行状态 if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then echo "INFO[`date +%F\ %H:%M:%S`] Script $0 already running..." exit fi # 确保退出时,锁文件被删除 trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT #将当前程序进程id写入锁文件 echo $$ > ${LOCKFILE} # 脚本正式内容 sleep 1000 # 删除锁文件 rm -f ${LOCKFILE} ``` 以下是脚本的说明: - `LOCKFILE=/var/lock/script.lock`:定义了一个锁文件的路径,可以根据需要更改为其他路径和文件名。 - `if [ -e ${LOCKFILE} ] && kill -0 cat ${LOCKFILE}; then`:首先检查锁文件是否存在,并且通过kill -0命令来判断锁文件中记录的进程ID是否仍在运行。如果锁文件存在且进程仍在运行,则表示脚本已经在运行,直接退出脚本。 - `trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT`:使用trap命令设置了一个信号处理器,在接收到INT、TERM、EXIT等信号时执行指定的命令。这里的命令是删除锁文件并退出脚本,以确保无论在什么情况下脚本都能正确地释放锁文件。 - `echo $$ > ${LOCKFILE}`:将当前脚本的进程ID写入锁文件,以表示当前实例正在运行。 - `sleep 1000`:这里是示例代码中的一个占位,你可以在这里编写你实际需要执行的任务逻辑。 - `rm -f ${LOCKFILE}`:在完成任务后,删除锁文件,释放锁资源。 当一个实例在运行时,其他实例尝试运行脚本时会检测到锁文件并退出,从而保证同一时间只有一个实例可以运行。 >*注意: 在使用进程锁时,锁文件的路径和命名需要确保唯一性,避免与其他脚本或进程冲突。另外,建议在脚本退出或发生意外终止时,确保锁文件被正确地删除,以避免出现死锁情况。
Nathan
June 8, 2023, 1:31 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password