手动运行脚本和使用 cronjob 运行脚本的区别

手动运行脚本和使用 cronjob 运行脚本的区别

我有一个 PHP 脚本,希望每 10 分钟运行一次,检查数据库记录并通过 MEncoder 创建/编辑电影。我已设置 cron 作业来实现此目的,但效果不佳。

我有我的 PHP 脚本,将其命名为 document.php。我还有一个 bash 脚本 (document.sh) 来调用此 PHP 脚本;

#!/bin/bash
php document.php

现在出现了奇怪的部分:当我手动运行 bash 脚本时,一切都运行正常 - 电影按照我想要的方式创建或编辑 - 但是当我让 cron 作业每 10 分钟运行一次 bash 脚本时,电影就损坏了。但是它们中有一些帧。我不知道这是怎么发生的。我检查了权限和文件路径,一切看起来都很好。cron 作业会终止我的进程吗?它有时间限制吗(运行 MEncoder 处理文件大约需要 1-2 分钟)?

希望有人能给出答案——这真的困扰着我,而且截止日期快到了。

我正在运行具有最新更新和来自 repo 的最新 MEncoder 的 Ubuntu Server。

谨致问候,Björn

答案1

从 cron 运行不会提取您的 shell 配置文件(~/.bashrc 或 ~/.profile 或 /etc/profile)。是否有可能存在影响您工作的环境变量?请尝试在脚本开始时手动获取您的配置文件。(. /path/to/profile

答案2

这是 cronjobs 的一个常见问题——你根本无法假设你的环境变量、路径等。我喜欢做的是让 cronjob 能够做到这一点,"set > /tmp/set"这样你就可以从 cronjob 的角度准确地看到你将要拥有什么。这样你就可以比较你的脚本所做的假设以及需要进行哪些调整。

答案3

我的简单解决方案是使用 LYNX 调用 php 文件,假设你有一个正在运行的 http 服务器

山猫http://127.0.0.1/document.php

答案4

正如其他人所说,最有可能的问题是缺少某些环境变量。如果不是这样,我能想到的另一种可能性是:你确定这项工作只需要 1-2 分钟吗?如果它花费的时间 > 10(你重新生成它的间隔),你最终可能会多次运行尝试修改相同的文件,这可能会导致你提到的一些损坏。

调试 cron 总是很有趣。首先,检查该系统上的 root 的电子邮件;如果 cron 作业将任何内容放在 stdout 上,它应该在那里。如果那里没有出现任何有用的信息,您可以制作通过将一些调试输出放入脚本中,就会出现一些内容。

相关内容