有一个a.py文件想要每一个小时运行一次,并且实现开机自启动。

设置定时任务

要在CentOS 7.9上设置定时执行您的a.py文件,您可以使用crontab。这是一个在Linux系统中用于设置周期性执行任务的工具。以下是您可以遵循的步骤:

  1. 首先,确保您的系统已经安装了crontab。您可以通过运行以下命令来安装它(如果尚未安装):

    1
    yum install crontabs
  2. 然后,启动并使crond服务在开机时自启动:

    1
    2
    systemctl enable crond
    systemctl start crond
  3. 接下来,使用crontab -e命令编辑crontab文件,为您的a.py文件添加一个定时任务。例如,如果您想每小时执行一次该脚本,可以添加以下行:

    1
    2
    3
    4
    0 * * * * /usr/bin/python /path/to/a.py

    # 下面这个是我的脚本运行
    0 * * * * /root/miniconda3/bin/python /root/system_check/user_analysic.py

    请确保将/path/to/a.py替换为您a.py文件的实际路径。

  4. 保存并退出编辑器。crontab会自动安装您的新定时任务。

  5. 最后,您可以通过crontab -l命令确认您的定时任务已经正确设置。

crontab定时任务的格式:

  • 0 * * * *:这部分是crontab的时间字段,指定了任务执行的频率。每个星号代表不同的时间单位:

    • 第一个数字 0 代表分钟,这里设置为 0 表示每小时的第0分钟。
    • 第二个星号 * 代表小时,可以是从 023 的任何数字,这里的星号表示每个小时。
    • 第三个星号 * 代表一月中的日子,可以是从 131 的任何数字。
    • 第四个星号 * 代表月份,可以是从 112 的任何数字。
    • 第五个星号 * 代表一周中的天数,可以是从 0(代表周日)到 6(代表周六)的任何数字。

    因此,0 * * * * 的意思是每小时的第0分钟执行一次,也就是说,每个整点都会执行一次。

  • /usr/bin/python:这是Python解释器的路径,用于执行Python脚本。

  • /path/to/a.py:这是您的Python脚本a.py的路径。您需要将其替换为脚本实际所在的路径。

  • 每两个小时执行一次:0 */2 * * * /usr/bin/python /path/to/a.py

综上所述,整行代码 0 * * * * /usr/bin/python /path/to/a.py 的意思是:每小时的开始时刻(每个整点),系统会调用 /usr/bin/python 解释器来执行位于 /path/to/a.py 的Python脚本。这是一种自动化执行脚本的常用方法,非常适合定期运行的任务。

Q:如果我的python 不在/usr/bin/python怎么办?

A:那就要用到以下方法去查询。 在CentOS系统中,您可以通过几种方法来查找Python解释器的路径。以下是一些常用的命令:

  1. which命令:这个命令会在您的PATH环境变量中搜索可执行文件,并返回找到的第一个匹配项的路径。您可以这样使用它:

    1
    which python

    如果您有多个Python版本安装,您可能需要指定版本号,例如:

    1
    which python3

    image-20240516091044207

  2. whereis命令:这个命令会搜索系统的标准二进制文件位置、源代码和手册页,并返回所有找到的路径。使用方法如下:

    1
    whereis python
  3. type命令:这个命令用于显示指定命令的类型。如果是可执行文件,它还会显示其路径。例如:

    1
    type -P python
  4. Python交互式解释器:您可以直接在Python交互式解释器中查找sys.executable,这将给出当前Python解释器的完整路径。打开终端,输入python进入Python交互式环境,然后输入以下命令:

    1
    2
    import sys
    print(sys.executable)

这些方法应该能帮助您找到Python解释器的路径。一旦找到,您就可以在crontab任务中使用正确的路径来执行您的Python脚本了。

设置开机自启动

要将您的a.py脚本设置为开机自启动,您可以使用以下方法之一:

  1. 使用/etc/rc.d/rc.local文件

    • 首先,确保/etc/rc.d/rc.local文件具有可执行权限。如果没有,您可以使用以下命令赋予权限:

      1
      sudo chmod +x /etc/rc.d/rc.local
    • 然后,编辑/etc/rc.d/rc.local文件,在文件末尾添加您的脚本启动命令,例如:

      1
      /usr/bin/python /path/to/a.py

      请确保将/path/to/a.py替换为您的脚本实际路径。

  2. 创建一个新的systemd服务

    • 创建一个新的服务文件,例如a.service,并将其放置在/etc/systemd/system/目录下。

    • 在服务文件中,添加以下内容:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      [Unit]
      # 这个部分是单元文件的头部,定义了服务的元数据。
      Description=My Python Script # 描述服务的内容,这里是“我的Python脚本”。

      [Service]
      # 这个部分指定了服务的行为。
      ExecStart=/usr/bin/python /path/to/a.py # ExecStart指令指定了启动服务时执行的命令。这里它调用Python解释器来运行位于/path/to/a.py的脚本。

      [Install]
      # 这个部分定义了如何安装这个单元,即如何使它在系统启动时自动启动。
      WantedBy=multi-user.target # WantedBy指令告诉systemd在哪个目标(target)下启动这个服务。multi-user.target是多用户的运行级别,适用于没有图形界面的常规服务器环境。

    • 启用服务并设置为开机自启动:

      1
      2
      sudo systemctl enable a.service
      sudo systemctl start a.service
  3. 使用chkconfig工具

    • 将您的启动脚本放入/etc/rc.d/init.d/目录。

    • 赋予脚本可执行权限:

      1
      sudo chmod +x /etc/rc.d/init.d/a.py
    • 使用chkconfig添加到开机自启动:

      1
      2
      sudo chkconfig --add a.py
      sudo chkconfig a.py on

以上方法可以帮助您设置脚本在CentOS 7.9系统开机时自动执行。

参考文章:

  1. 教你如何在Linux下让Python脚本自启动和定时启动! - 知乎 (zhihu.com)