at 命令输出在不同版本和操作系统之间不一致。还有其他方法吗?

at 命令输出在不同版本和操作系统之间不一致。还有其他方法吗?

我已经编写了一个小型 PHP 脚本来在 Ubuntu 上包装该at命令。现在我需要在 Redhat 服务器上运行相同的代码。当然,添加和列出作业时的输出当然是不同的。

Ubuntu(at -V= 3.1.11):job 4 at Fri Nov 12 13:41:00 2010

红帽(at -V= 3.1.8):job 14 at 2010-11-12 13:42

有什么方法可以修改命令的输出at以使其更加统一吗?我已经阅读过了man at,但我什么也没看到,但也许我错过了一些偷偷摸摸的捷径。

我正在使用正则表达式来“读取”输出,以便我可以更新它以支持 Redhat 格式,但是如果在不同的发行版上运行相同的内容会发生什么。

答案1

我可以看到字符串在日期/时间格式上有所不同。您可以将输出拆分为两个子字符串(job 4 at)和日期/时间部分。然后,您可以使用函数解析日期strtotime

最后,您可以将第一部分与解析后的日期/时间结合起来。这样,您就会得到统一的输出。此外,您还可以将日期/时间部分转换为所需的格式。

答案2

您可以使用类似以下方法将日期标准化:

date -d "$date" --rfc-3339=seconds

我本来要建议以下内容,但at似乎忽略了区域环境变量:

LC_TIME=C at -v ...   # has no effect

答案3

我发现使用at-v标志在 Ubuntu 和 Redhat 上都会产生相同的日期输出格式。输出如下所示:

Ubuntu

Fri Nov 12 13:41:00 2010

warning: commands will be executed using /bin/sh
job 4 at Fri Nov 12 13:41:00 2010

红帽

Fri Nov 12 13:42:00 2010

job 14 at 2010-11-12 13:42

这将允许我从第一行获取日期,然后从最后一行获取工作编号。

在添加任务时这没问题,但在队列中列出任务时则-v不行,日期格式仍然会有所不同。我想也许是时候换一个队列软件了。

相关内容