2017-05-19 7 views
0

cronからスクリプトを実行するときに似たような問題がある人がいるかどうか不思議です。このスクリプト行は、opentsdb_daemon.logファイルをopentsdb_daemon_with_pid.logにコピーする必要があります。現在、openTSDBは1つのPIDでのみ実行されています。プロセスをpidからlog_file_nameにストリップする(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デーモンはエラーを記録しますか?それで、あなたはそれを提供することができますか? – Esteban

答えて

0

コマンドps -ef | grep [o]pentsdb | awk '{print $2}'は、cronを実行するときに複数のPIDを返す必要があります。取得するのは、「?」で区切られたすべてのPIDです。

"?" \nが正しくファイル名に

をdiplayedされていないためである私は、cronのコマンドを実行すると、コマンドはそう、プロセスの一覧に表示されますので、それがあることを前提としています

grep [o]pentsdbgrep [o]pentsdbでもgrepのである。)

あなたは、プロセスラインはとたぶんソリューションを追加することができ、「コマンドXXX」

である。このプロセスの子「のcronコマンドxxxの実行」されている2つの連続したPID 63453と63454で、それを決定することができます次のようなもの:

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

+0

正しいピッドだけを残してそれらの厄介なピッドを取り除く方法はありますか? –

+0

@PrzemysławPuchajdaこれらの行を削除しようとすると、 'grep -Ev" grep | cron "'を最初の 'grep'の後ろに追加しようとします。 – Esteban

+0

は残念ですが、出力はopentsdb_daemon_pid_73844の出力と同じですか?73845?76079.log –

関連する問題