将进程 pid 剥离到log_file_name(从 cron 运行时的奇怪行为)



我很好奇是否有人在从 cron 运行脚本时遇到类似的问题。这行脚本应opentsdb_daemon.log文件复制到opentsdb_daemon_with_pid.log。目前 openTSDB 只在一个 PID 上运行。

!/bin/sh
cp -f /opt/opentsdb/opentsdb-2.2.0/var/log/opentsdb/opentsdb_daemon.log "/opt/opentsdb/opentsdb-2.2.0/var/log/opentsdb/opentsdb_daemon_pid_$(ps -ef | grep [o]pentsdb  | awk '{print $2}').log

它运行正常。文件opentsdb_daemon_pid_76079.log被创建,但是当运行fron cron时,它会创建如下内容:opentsdb_daemon_pid_63453?63454?76079.log

我尝试从不同的 cron 用户运行它 - 具有相同的效果。如有任何建议,我将不胜感激。

命令ps -ef | grep [o]pentsdb | awk '{print $2}'应该在 cron 运行时返回多个 PID,你得到的是用"?">

"?"是因为文件名中n未正确分配

我假设这是因为当cron执行命令时,该命令出现在进程列表中,因此:

grep [o]pentsdb也是grep [o]pentsdb ;)的格雷普

您可以通过两个连续的 PID 63453 和 63454 来确定它,它们是进程线"cron 执行命令 xxx",而该进程的子进程是"命令 xxx">

也许一个解决方案可能是添加类似的东西:

$(ps -ef | grep [o]pentsdb |grep -Ev "grep|cron" | awk '{print $2}')

最新更新