1

希望有人可以在这里帮助我。

我写了一个 python 脚本,我想每 5 分钟在 CRON 下运行一次。根据最小特权的一般安全实践,我:

  • 创建了一个用户“自定义”以用于自定义脚本
  • 创建了一个“自定义”组(不希望在任何人下运行的任何东西都可以访问)并且;
  • 将脚本(监视器)放在 /home/custom/bin

脚本中的 shebang 是:

#!/usr/bin/env python2.7

授予用户自定义的唯一权限是:

Inherited from   Name   Description                  Action
                User - System: Shell account access   Indicates whether the user is able to login for example via SSH.

无论当前工作目录如何,都可以从命令行使用命令/home/custom/bin/monitor运行脚本。

我尝试先执行 cd / 以确保它不是路径问题,并且脚本运行正确。

该脚本在第一次运行时写入 2 个文件,随后的运行附加到目录 /home/custom/bin/mondata 中的这些文件

我安装了 CRON 包并创建了以下条目:

*/5 * * * * 自定义 /home/custom/bin/monitor

(似乎没有“应用更改”,所以我假设我不需要重新启动或执行任何操作来加载更改。)(上面的条目和许多其他条目都显示在 WebGUI 中,并且我知道其他几个 cron 作业正在运行。)

在等待足够的时间让脚本运行后,我检查了输出,但什么也没有。

出于测试目的将 custom 更改为 root (以防万一问题是权限问题)并不能解决问题。

以下是相关的文件权限:

[2.3.2-RELEASE][custom@local]/home/custom/bin: ls -laR ~
total 52
drwxr-xr-x  4 custom  nobody   512 Aug  7 00:14 .
drwxr-xr-x  4 root    wheel    512 Jul 27 15:24 ..
drwxr-xr-x  3 custom  custom   512 Aug  7 00:14 bin

/home/custom/bin:
total 20
drwxr-xr-x  3 custom  custom   512 Aug  7 00:14 .
drwxr-xr-x  4 custom  nobody   512 Aug  7 00:14 ..
drwxrwx---  2 custom  custom   512 Aug  7 00:07 mondata    <-Script output goes here
-rwxr-xr-x  1 custom  custom  4663 Aug  5 22:44 monitor    <-The script

/home/custom/bin/mondata:
total 8
drwxrwx---  2 custom  custom  512 Aug  7 00:07 .           <-NO OUTPUT! (I deleted the files manually after successful tests)
drwxr-xr-x  3 custom  custom  512 Aug  7 00:14 ..

我在以下位置检查了错误消息:状态/系统/日志/系统/常规- 未找到任何内容。

我什至尝试暂时将 /home/custom/bin/mondata 上的权限更改为 777 并将 cron 用户设置为 root (完全不可接受的安全实践只是为了测试,但即使这样也没有用。)

我无法知道脚本是否正在运行并且文件写入由于某种原因被拒绝,或者脚本是否根本没有运行。

顺便说一句,cron 选项卡在哪里? 当我以 root 身份运行 crontab -l 时,我得到 crontab: no crontab for root,但我知道 cron 作业正在运行。(我正在运行每日邮件报告。)

任何建议 - 即使是故障排除以了解脚本是否正在运行也会有所帮助。

谢谢。

4

1 回答 1

0

问题是python没有执行。

在命令行工作的所谓“便携式”shebang -

#!/usr/bin/env python2.7

- 不适用于 cron。

我将以下文件创建为 /home/custom/bin/tcron

#!/usr/bin/env python2.7
import os
os.system('/usr/local/bin/minicron')

从命令行运行时,它每次运行时都会将 minicron 错误放入日志中,但从 cron 运行时什么也不做。

我将#!/usr/bin/env python2.7 更改为#!/usr/local/bin/python2.7,现在它可以工作了。

我不知道这是否是故意的 #!/usr/bin/env python2.7 在 cron 中不起作用,但现在我不会担心它。

我希望通过记录它可以为其他人节省同样的麻烦,如果这是一个应该报告的错误,那么知道如何做到这一点的人会这样做。

于 2016-08-16T21:24:51.447 回答