CentOS /tmp/ 目录特性与CGI程序实现等待页面的方法

1. CentOS系统/tmp/目录的性质和使用方法

在CentOS系统中,/tmp目录具有以下重要特性:

  1. 基本性质
    • /tmp是一个临时文件存储位置,是Linux文件系统层次结构的标准部分
    • 它通常使用tmpfs文件系统,这意味着它存储在RAM/交换分区中,而不是物理磁盘上,并在每次重启时被清空
    • 它具有特殊的权限设置(通常为1777),这意味着所有用户都可以在其中创建文件,但只能删除自己的文件
  2. 存储特性
    • tmpfs将所有内容放入内核内部缓存中,并根据其包含的文件增长和收缩,能够将不需要的页面交换到交换空间
    • 它只消耗存储当前内容所需的物理内存和交换空间
    • 在CentOS中,通常会为tmpfs设置最大大小限制,默认为物理RAM的50%
  3. 清理机制
    • 在某些CentOS版本中,/tmp中的文件由tmpwatch处理,如果10天内未被访问,则会被删除
    • 在使用systemd的更新版本中,此功能已移至systemd服务
    • 重启系统时会自动清空tmpfs上的/tmp
  4. 使用方法
    • 适用于需要高速访问的临时文件
    • 适合存储不需要在重启后保留的数据
    • 可以通过mount命令或修改/etc/fstab配置tmpfs的大小和其他参数
    • 可以在不重启的情况下临时调整tmpfs大小,例如当需要运行大型编译作业时

2. CGI程序通过/tmp/实现程序执行时等待页面的具体方法步骤

CGI程序使用/tmp目录实现长时间运行任务的等待页面,主要涉及以下步骤:

  1. 主CGI脚本初始化
    • 接收表单参数
    • 生成唯一的作业ID(通常使用时间戳+随机字符串或UUID)
    • 在/tmp/中创建参数文件:/tmp/[job_id].params
    • 将所有表单参数以结构化格式写入此文件
  2. 启动后台进程
    • 主脚本启动后台进程处理实际分析
    • 可以使用&操作符、nohup命令或作业队列系统
    • 将作业ID作为参数传递给后台进程
  3. 返回等待页面
    • 主脚本立即向用户返回HTML页面
    • 等待页面包含处理中消息、进度指示器和检查状态的JavaScript
    • 作业ID嵌入页面或URL参数中
  4. 后台进程执行
    • 后台进程从/tmp/[job_id].params读取参数
    • 执行计算工作
    • 可能更新状态文件:/tmp/[job_id].status
    • 完成后将结果写入/tmp/[job_id].results
  5. 状态检查
    • 等待页面使用JavaScript定期轮询状态检查脚本
    • 状态脚本检查/tmp/[job_id].status和/tmp/[job_id].results
    • 返回JSON格式的状态信息
  6. 显示结果
    • 当状态检查显示完成时,等待页面重定向到带有作业ID参数的结果页面
    • 结果页面CGI脚本从/tmp/[job_id].results检索结果
    • 格式化并向用户显示这些结果

这种方法利用了/tmp目录的特性来实现异步处理模式,避免了长时间运行的CGI请求超时问题,同时为用户提供了响应式体验。