2012-11-16 45 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 

但我不希望記錄被寫入/var/log/messages消息,因爲我沒有root權限。相反,我希望它被寫入我的主目錄中的文件:/home/myuser/mylog

我應該如何修改上面的logger命令?

回答

3
$ man logger 

記錄器提供了一個外殼命令接口到syslog(3)系統日誌模塊。

如果您希望它將日誌記錄到其他位置,則需要更改syslog配置。例如,您可以建立一個特定的設施,該設施在您的主目錄中具有輸出文件。不過,您需要成爲root用戶才能做到這一點。

8

我不認爲你真的需要(或想)涉及logger/syslog爲此。只需更換劇本與最後一行:

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

適當的時間戳會以這種方式丟失,他必須手動完成。此外,爲了支持優先級和/或標籤(這是甚至最原始的記錄器的常見特徵,例如區分成功,錯誤,警告等),他必須從頭開始實施。 (在那裏,做了這個,經過幾次半心半意的嘗試後,我也只是以記錄器結束了。) –

+0

@Sz。這些觀察都是正確的。但是,除了定製'syslog'(或'syslog-ng'或'rsyslog',無論他的分發版本使用什麼版本)的配置外,如果沒有root權限,你可以自己動手,可能需要藉助某些Python/Java /任何庫都可用,幾乎是將日誌導入到您控制的文件中的唯一方法... – twalberg

+0

您的觀點也是正確的。 :) –

2

如果你想使用logger這樣出現的消息無論是在系統日誌,並在你的一些文件,你可能會做

logger -s your message 2> $HOME/somefile 

由於-s選項logger標準錯誤被重定向到文件,2>

+0

怎麼樣exitvalue = $? ?我應該在哪裏插入它? – alwbtc

+0

@Basile Starynkevitch我使用這個命令,它顯示在STDOUT上。但它並沒有保存在givwn文件中。爲什麼? – devsda

+2

'2>&1'將stderr重定向到stdout。除非將stdout重定向到此文件,否則它不會寫入文件。你可以用'> the_file 2>&1'來重定向,或者如果你不想保存標準輸出,你可以執行'2> the_file'。我會用後者編輯答案。 –

4

還輸出我覺得你更好的選擇將是如果您不想寫入系統日誌文件(並且沒有專用權限),請使用date命令而不是logger

有關如何使用date爲消息加上日期前綴並將其寫入文件的詳細信息,請參閱「timestamp before an echo」。

您創建一個bash的功能,看起來像以下,調整date格式字符串得到你想要的東西:

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

在你的bash腳本,那麼您需要使用:

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

這會將以下內容放在您的${LOGFILE}文件中:

Mar 11 08:40 your message here 
1

不幸的是,你不能。

logger命令只是系統記錄器的一個精簡前端。這意味着你所提供的任何東西都會轉移到syslogd,然後進行各種處理(如添加時間戳,主機名,優先級,標籤等)以及複雜的調度到各個出口(各種文件,套接字,其他服務器等等。)。

它甚至沒有橋接權限級別,所以在您的示例中,您仍可以登錄到sysloguser.log,例如,沒有問題,即使您不可以直接修改這些文件。

如果logger可以直接登錄到一個文件,它可能會像簡單的回顯單線程一樣愚蠢,或者必須重新實現由syslog完成的許多消息處理任務。無論哪種方式,這將是一個壞主意。

如果標準syslog接口有一種方法來指定特定的插座參數(如文件名)以及消息,那麼可以在不重新配置系統的情況下登錄到自定義文件(哪些普通用戶無論如何都沒有許可)。

相關問題