我已经编写了一个小型 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
不行,日期格式仍然会有所不同。我想也许是时候换一个队列软件了。