【问题标题】:How do I schedule the execution of a python script in linux with the at command?如何使用 at 命令在 linux 中安排 python 脚本的执行?
【发布时间】:2021-10-06 17:04:06
【问题描述】:

我的目标是使用at 命令在 Linux 中安排一个简单的 python 脚本的执行。

问题:我的python脚本没有在指定时间执行。没有任何反应,没有错误消息。

我有以下简单的helloworld 文件:

#!/usr/bin/python3

print("hello world")

要安排我键入的作业:

at now + 1 min

我提供我要执行的文件:

./helloworld

输入atq 我看到工作安排得很好。

但它只是发生了......什么都没有。

  • 我在 Kali Linux 上工作
  • 我已向 root 用户授予该文件的执行权限
  • 我可以从命令行运行helloworld文件
  • root 用户有权运行命令(/etc/at.deny 中未列出)
  • 我可以安排工作echo "hello world" > message.txt。效果很好。

我不确定的:

  • shebang 线路有问题吗?
  • 我检查了/usr/bin/python3 在那里并链接到python3.9

【问题讨论】:

  • 程序实际上没有运行的迹象是什么?传统上,来自 at 工作的输出通过电子邮件发送给工作的所有者,但在当今的 Linux 安装中,这种机制往往是开箱即用的(尽管我不熟悉 Kali)。
  • atd 守护进程是否正在运行?
  • @KamilCuk 是的,atd 正在运行
  • @TurePålsson 好的,你可能是对的......我希望我执行的 python 文件的输出会打印到屏幕上。我错了吗?我可以从命令行运行 python shell 脚本并将输出打印到屏幕上。我假设我也可以安排执行相同的 shell 脚本?如何检查 at 命令是否在您之后起作用?
  • 正如我所说,传统上,来自 at 作业的输出已通过邮件发送,因为无法保证在作业运行时用户仍处于登录状态。正如您尝试使用echo hello >file.txt 一样,您可以执行./helloworld >file.txt 并查看是否创建了file.txt。

标签: python python-3.x scheduled-tasks


【解决方案1】:

at 不写入终端(命令运行时终端甚至可能不存在)。相反,

如果有的话,用户将收到来自他的命令的标准错误和标准输出。邮件将使用命令 sendmail(8) 发送。如果 at 从 su(1) shell 执行,登录 shell 的所有者将收到邮件。

因此,如果您的命令仅写入标准输出,则需要使用mail 或其他邮件客户端检查本地邮箱以获取命令输出。

否则,您可以让您的命令显式写入其他已知文件以供以后查找。

【讨论】:

    【解决方案2】:
    1. 最好为您的脚本保留扩展名.py,因为它是python。
    2. 您的文件应该是可执行的
    $ chmod +x ./helloworld
    
    1. 根据您的需要,您可以在运行at 时输入脚本的完整路径。
    2. 如果要使用helloworld 命令,包含此脚本的文件夹应位于PATH 环境变量中。否则,系统只是不知道在哪里找到它。如果这样做,则根本不需要在命令或任何路径之前键入 ./
      关于PATH https://opensource.com/article/17/6/set-path-linux 的好文章

    【讨论】:

    • 谢谢,谢尔盖·马拉宁。这篇文章确实不错,而且正是我这些天所学到的。但是让我们澄清一下:如果我准确地指出文件路径,我不需要将我的文件路径添加到 PATH 变量中......我错了。只有当我希望系统自己查找文件时,我才必须将其添加到 PATH 变量中……在我的示例中,我告诉系统确切地在哪里查找文件。
    • 这在几个方面是可疑的或不正确的。没有特别的理由支持 Python 脚本的 .py 扩展;在某些情况下可以省略,就像 which 没有命名为 which.plls 不是 ls.bin。命令./helloworld 只会查看当前目录,完全忽略PATH
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多