2012-11-16 10 views
8

は、私は次のスクリプトを実行します:loggerコマンドを使用して、Linuxの特定のファイルにどのようにログインできますか?

#!/bin/bash 
./myprogram 

#get exit code 
exitvalue=$? 

#log exit code value to /var/log/messages 
logger -s "exit code of my program is " $exitvalue 

をしかし、私はroot権限を持っていないので、私は/var/log/messagesに書き込まれるメッセージをログに記録したくありません。代わりに私はそれを私のホームディレクトリにあるファイルに書きたいと思っています:/home/myuser/mylog

上記のloggerコマンドはどのように変更すればよいですか?

答えて

3
$ man logger 

ロガーは、syslog(3)システムログモジュールのシェルコマンドインターフェースを提供します。

他の場所に物事を記録するには、syslog設定を変更する必要があります。たとえば、特定のファシリティを設定して、ホームディレクトリに出力ファイルを作成することができます。しかし、それを行うにはrootになる必要があります。

8

私はあなたが本当にこのためlogger/syslogが関与する必要があります(またはしたい)とは思いません。あなたは、メッセージがシステムログにとあなたのいくつかのファイルの両方に表示され、あなたが

logger -s your message 2> $HOME/somefile 

を行う可能性がありますようにloggerを使用したい場合は

echo "Exit code of my program is $exitvalue" >> /some/file/that/you/can/write/to 
+0

このように正しいタイムスタンプが失われると、手動でタイムスタンプを行う必要があります。また、プライオリティレベルやタグ(最も基本的なロガーでさえ、非常に一般的な機能、例えば、成功、エラー、警告などを区別する機能)をサポートするためには、ゼロから実装する必要があります。 (そこに行って、それをやって、そして少し心のこもった試みの後、私はロガーでも終わった。) –

+0

@Sz。これらの観察はすべて正しい。しかし、 'syslog'(または' syslog-ng'や 'rsyslog')の設定をカスタマイズすることは別として、ルート権限なしではできないものを自分のものにすることもできます。特定のPython/Java /利用可能なライブラリは、制御するファイルにログを取得する唯一の方法です。 – twalberg

+0

あなたのポイントも正しいです。 :) –

2

:単純に、スクリプトの最後の行を置き換えますloggerから-sオプションも2>

+0

exitvalue = $はどうですか? ?どこに挿入すればいいですか? – alwbtc

+0

@Basile Starynkevitch私はこのコマンドを使用し、STDOUTに表示します。しかし、それはgivwnファイルに保存されませんでした。どうして ? – devsda

+2

'2>&1'はstderrをstdoutにリダイレクトします。このファイルにstdoutをリダイレクトしない限り、ファイルに書き込まれません。 '> the_file 2>&1'でリダイレクトすることもできますし、stdoutを保存したくない場合は' 2> the_file'を実行することもできます。私は後者で答えを編集します。 –

4

をファイルにリダイレクトされstderrのに出力するので、私はあなたのより良い選択をすることだと思いますsyslogファイルへの書き込みを望まない場合(およびprivを使用しない場合)、dateコマンドをloggerではなく使用してください。

dateを使用してメッセージに接頭辞を付けてファイルに書き込む方法の詳細については、「timestamp before an echo」を参照してください。

あなたが望む結果を得るためにdateフォーマット文字列を調整し、次のようになりますbashの関数を作成します、あなたのbashスクリプトで

echo_time() { 
    echo `date +'%b %e %R '` "[email protected]" 
} 

あなたがして使用します。

echo_time "Your message here" >> ${LOGFILE} 

あなたの${LOGFILE}ファイルに次のものを入れます:

Mar 11 08:40 your message here 
1

残念ながら、あなたはできません。

loggerコマンドは、システムロガーのフロントエンドにすぎません。つまり、あなたが供給しているものはsyslogdになります。タイムスタンプ、ホスト名、優先度、タグなどの追加やさまざまなアウトレット(さまざまなファイル、ソケット、その他のサーバーへの複雑なディスパッチなど)等。)。

これはブリッジレベルの権限レベルでもあります。したがって、例では、これらのファイルを直接変更することはできませんが、問題がない場合でもsyslogまたはuser.logにログできます。

loggerがファイルに直接ログすることができた場合、単純なエコー1ライナーと同じようにダムになるか、syslogによって行われるメッセージ処理の多くを再実装する必要があります。いずれにせよ、それは悪い考えです。

標準のsyslogインターフェイスで、メッセージと一緒に特別なコンセントパラメータ(ファイル名など)を指定する方法があれば、システムを再設定せずにカスタムファイルにログできるようになりますとにかく許可を得ていない)。

関連する問題