linux - 无人登录时如何运行维护脚本?

标签 linux ubuntu server cron maintenance

我必须在 ubuntu 服务器上为硬盘运行维护脚本(创建一些索引并做一些数据科学魔术)。为了运行脚本,我有两个要求:

  • 没有用户登录(root 可能是一个异常(exception),但我还不确定)
  • 硬盘上的 IO 为 0(或几乎为 0)

  • 该脚本可能需要运行数周/数月,以便在任何人登录时不应运行该脚本,因为它不应干扰其他人的工作,并且不应在任何应用程序已在使用硬盘驱动器时运行,以免减慢速度向下。

    我考虑过使用 crontab 每分钟检查是否有任何用户登录并检查硬盘 IO,但我不确定如何处理这个问题,因为当有人登录时需要停止脚本。因为脚本本身也会产生硬盘驱动器上的 IO(因此在检查中它将大于 0)我需要将完整的硬盘驱动器 IO 与脚本产生的 IO 进行比较。

    任何帮助,将不胜感激 :-)

    更新:

    目前我正在考虑连续运行类似的东西:
    if [ -z "$(who)" ]
    then
      # check whether already running
      if [ -z "$ps aux | grep "superAwesomeScript.sh"" ]
      then
        bash superAwesomeScript.sh
      fi
    else
      pkill -f superAwesomeScript.sh
    fi
    

    缺少 IO 检查,但没有更好的方法吗?

    最佳答案

    我认为您正在寻找的是 service .他们通常在后台连续运行并做他们的事情。您可以在/etc/init.d 中查找脚本以获取示例。

    然后,您将不得不阅读有关您的 ubuntu 版本正在使用的服务系统的信息。即 18.04 使用 systemd
    虽然它们不能解决您的确切问题,但它们最终会让您启动并运行。

    当前登录用户的数量可以用bash查看,比简单的who的anylisis简单一点:

    who -qs | grep -o '[0-9]\+'
    

    这将返回一个数字,而不是“简单地”整个输出

    关于linux - 无人登录时如何运行维护脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513930/

    相关文章:

    linux - 如何安全地将 apache 版本降级到不适合当前 gnome 状态的版本?

    linux - 如何在 Linux 内核中人为造成页面错误?

    linux - 在 XUbuntu 中运行 Genymotion 时出现符号查找错误

    linux - 在 quilt/dquilt 补丁 : patch applies correctly by hand, 中添加一个文件,但会破坏 debuild

    bash - 意外 token 'fi'

    linux - 无法在 VirtualBox Debian 8 中访问 Ajenti Web 面板端口

    linux - PML4 的缩写是什么?

    linux - 如何获取 LLVM 调试符号

    nginx - 如何禁止通过 IP 地址直接访问网站

    php - 使用 PHP 在我的 Owncloud 服务器上上传文件