在我尝试安装 Perl Power Tools 后,我在 RHEL 5.3 中遇到了问题。一切都运行正常,直到我尝试手动安装该软件包(服务器无法访问互联网)。
起初,每个使用 awk 的 shell 脚本都会出错,因此我删除了 Perl Power Tools,并从服务器中配置的本地存储库重新安装了 awk,问题就解决了。之后,cron 作业开始在执行命令 date 时出错。
当我进行“男人约会”时,会出现以下情况:
DATE(1) User Contributed Perl Documentation DATE(1)
Name: date Description: display or set date and time Author: Joshua Gross License:
NAME
date - display or set date and time
perl v5.8.8 2014-12-18 DATE(1)
(END)
但是默认日期命令应该给出其他输出:
DATE(1) User Commands DATE(1)
NAME
date - print or set the system date and time
SYNOPSIS
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
DESCRIPTION
Display the current time in the given FORMAT, or set the system date.
-d, --date=STRING
display time described by STRING, not ‘now’
-f, --file=DATEFILE
like --date once for each line of DATEFILE
-r, --reference=FILE
display the last modification time of FILE
-R, --rfc-2822
output date and time in RFC 2822 format
--rfc-3339=TIMESPEC
output date and time in RFC 3339 format. TIMESPEC=‘date’, ‘seconds’, or ‘ns’ for date and time to the
indicated precision.
-s, --set=STRING
set time described by STRING
-u, --utc, --universal
print or set Coordinated Universal Time
--help display this help and exit
我尝试卸载 date 并重新安装 coreutils(包含 date 的包),但出于某种原因,新的 date 命令不断返回。我不知道如何恢复旧的 date 命令。提前致谢。
干杯,
更新1:
这是脚本内部使用日期的方式以及它产生的错误:
date --date="1 days ago" +%Y%m
Option -date not support in this version.
当我在另一台服务器上尝试使用默认日期命令时,它运行良好。
这是哪个日期的输出:
[root@wrongserver ~]# which date
/bin/date
更新2:
普通服务器中date--version的输出:
[root@OKserver lib64]$ date --version
date (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
Written by David MacKenzie.
有问题的服务器中的 date --version 输出:
[root@wrongserver ~]# date --version
date (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
Written by David MacKenzie.
重新安装后似乎唯一没有改变的是手册页,而且我实际上使用的是相同的日期二进制文件,而且日期来自正确的包
[root@domstats ~]# rpm -qf /bin/date
coreutils-5.97-19.el5
但是当我使用 crontab 在脚本中运行 date 命令时,仍然会收到错误,我想我之前没有充分注意到这一点。只有当使用date --date="1 days ago" +%Y%m
crontab 在脚本中运行该行时,才会出现 date 命令的错误。如果我在提示符下运行该行,它会正常运行,如果我手动运行脚本,它也会正常运行。
我做了一些测试,并像这样改变顺序,使脚本使用 cron 正常运行date +%Y%m --date="1 days ago"
,当然,在 cron 中的脚本中改变这一点很麻烦,它应该正常工作,因为在其他服务器上确实有效。
答案1
好吧,我发现了这个小错误,我知道它很小,不会被注意到。原来,在 cron 中的脚本运行时,PATH 变量被更改了,结果就是这样/usr/bin:/bin
。
冲突的date
命令安装在 /usr/bin 中而不是 /bin 中,因此 cron 使用了错误的命令,但我没有注意到,因为在正常用户会话中 PATH 变量被反转了/bin:/usr/bin
。
不过还是感谢你的帮助。