2017-05-19 34 views
0

我很好奇從cron運行腳本時是否有人遇到類似的問題。這行腳本應該將opentsdb_daemon.log文件複製到opentsdb_daemon_with_pid.log。目前openTSDB只在一個PID上運行。剝離log_file_name的進程pid(從cron運行時會出現奇怪的行爲)

!/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用戶運行它 - 具有相同的效果。我會非常感謝任何建議。

+0

運行這個'ps -ef | grep [o] pentsdb | awk'{print $ 2}''分開。它會給你一個提示。或者在這裏發佈輸出,我會給你一個提示 – RomanPerekhrest

+0

我假設它是一個複製/粘貼錯誤,但它在命令末尾丟失了一個雙引號 – Esteban

+0

另外,cron守護程序是否記錄了一個錯誤,並且if所以,你能提供它嗎? – Esteban

回答

0

命令ps -ef | grep [o]pentsdb | awk '{print $2}'應該在cron運行時返回多個PID,你得到的是所有的PID都由「?」分開。

「?」是因爲\n未在文件名正確diplayed

我假定這是因爲當cron的執行命令,該命令出現在處理列表中,因此:

grep [o]pentsdb也grep的由grep [o]pentsdb

你可以通過兩個連續的PID 63453和63454來確定它是過程行「cron執行命令xxx」,這個過程的子進程是「命令xxx」

也許一個解決方案可能是添加如:

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

+0

有什麼辦法擺脫那些令人討厭的pids只留下正確的pid? –

+0

@PrzemysławPuchajda我會嘗試在第一個'grep'之後添加'| grep -Ev「grep | cron」'以嘗試消除這些行 – Esteban

+0

不幸的是,efect在輸出處相同opentsdb_daemon_pid_73844?73845?76079.log –

相關問題