2012-11-16 30 views
8

tôi sẽ chạy kịch bản sau đây:Làm cách nào để đăng nhập vào một tệp cụ thể trong linux bằng lệnh logger?

#!/bin/bash 
./myprogram 

#get exit code 
exitvalue=$? 

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

Nhưng tôi không muốn nhắn được viết bằng /var/log/messages đăng nhập bởi vì tôi không có quyền root. Thay vào đó, tôi muốn nó được ghi vào một tệp trong thư mục chính của tôi: /home/myuser/mylog

Tôi nên sửa đổi logger lệnh ở trên như thế nào?

Trả lời

3
$ man logger 

Logger cung cấp một giao diện lệnh shell đến syslog (3) mô-đun hệ thống đăng nhập.

Bạn sẽ cần phải thay đổi cấu hình nhật ký hệ thống của mình nếu muốn đăng nhập vào những nơi khác. Bạn có thể thiết lập một cơ sở nhất định có tệp đầu ra trong thư mục chính của bạn, chẳng hạn. Bạn sẽ cần phải được root để làm điều đó, mặc dù.

8

Tôi không nghĩ bạn thực sự cần (hoặc muốn) liên quan đến logger/syslog cho việc này. Chỉ cần thay thế dòng cuối cùng của kịch bản với:

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

Dấu thời gian thích hợp sẽ bị mất theo cách này, sau đó anh ấy phải thực hiện thủ công. Ngoài ra, để hỗ trợ mức độ ưu tiên và/hoặc thẻ (là các tính năng rất phổ biến của ngay cả những trình ghi nhật ký nguyên thủy nhất, ví dụ: phân biệt thành công, lỗi, cảnh báo, v.v.), anh ta cũng phải triển khai, điều đó, từ đầu. (Đã ở đó, thực hiện điều đó và sau một vài nỗ lực nửa vời, tôi cũng đã kết thúc bằng nhật ký.) –

+0

@Sz. Những quan sát đó đều đúng. Tuy nhiên, ngoài việc tùy chỉnh cấu hình 'syslog' (hoặc' syslog-ng' hoặc 'rsyslog', bất kể phiên bản phân phối của anh ta đang sử dụng), cái mà anh ta không thể làm mà không có đặc quyền gốc, tự mình làm, có thể với sự trợ giúp của một số Python/Java/bất kỳ thư viện nào có sẵn, là cách duy nhất để đưa nhật ký vào một tệp mà bạn kiểm soát ... – twalberg

+0

Điểm của bạn cũng chính xác. :) –

2

Nếu bạn muốn sử dụng logger để các thông báo xuất hiện cả trong các bản ghi hệ thống và trong một số tập tin của bạn, bạn có thể làm

logger -s your message 2> $HOME/somefile 

kể từ khi -s tùy chọn để logger cũng kết quả đầu ra trên stderr được chuyển hướng đến các tập tin với 2>

+0

Làm thế nào về exitvalue = $? ? nơi tôi nên chèn nó ở trên? – alwbtc

+0

@Basile Starynkevitch Tôi sử dụng lệnh này, nó hiển thị trên STDOUT. Nhưng nó không lưu trong tập tin givwn. Tại sao ? – devsda

+2

'2> & 1' chuyển hướng stderr thành stdout. Nó sẽ không ghi vào một tập tin trừ khi bạn chuyển hướng stdout vào tập tin này quá. Bạn có thể chuyển hướng cả hai với '> the_file 2> & 1' hoặc, nếu bạn không muốn lưu stdout, bạn có thể làm' 2> the_file'. Tôi sẽ chỉnh sửa câu trả lời với câu trả lời sau. –

4

tôi nghĩ rằng lựa chọn tốt hơn của bạn sẽ được sử dụng lệnh date thay vì sau đó logger trong trường hợp bạn không muốn ghi vào tệp nhật ký hệ thống (và không có cá nhân để làm như vậy).

Xem "timestamp before an echo" để biết chi tiết về cách sử dụng date để thêm tiền tố vào thư có ngày và ghi vào một tệp.

Bạn tạo một chức năng bash trông như sau, điều chỉnh chuỗi định dạng date để có được những gì bạn muốn:

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

Trong kịch bản bash của bạn, sau đó bạn sẽ sử dụng:

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

Mà sẽ đặt những điều sau đây trong tệp ${LOGFILE} của bạn:

Mar 11 08:40 your message here 
1

Thật không may, bạn không thể.

Lệnh logger chỉ là giao diện người dùng cho trình ghi nhật ký hệ thống. Điều này có nghĩa là bất cứ thứ gì bạn nạp vào nó sẽ chuyển sang chế độ syslogd, sau đó thực hiện tất cả các loại xử lý (như thêm dấu thời gian, tên máy chủ, mức độ ưu tiên, thẻ, vv) cũng như gửi đi phức tạp đến các cửa hàng khác nhau (các tệp khác nhau, ổ cắm, máy chủ khác) v.v.)

Nó thậm chí còn cấp mức cho phép cầu, vì vậy trong ví dụ của bạn, bạn vẫn có thể đăng nhập vào syslog hoặc user.log, chẳng hạn, mặc dù bạn không thể sửa đổi trực tiếp các tệp đó.

Nếu logger có thể đăng nhập trực tiếp vào tập tin, nó sẽ bị câm như một cuộn đơn giản, hoặc sẽ phải thực hiện lại nhiều nhiệm vụ xử lý tin nhắn do syslog thực hiện. Dù bằng cách nào, đó sẽ là một ý tưởng tồi. Sẽ tốt hơn nếu giao diện syslog chuẩn có cách để chỉ định một tham số đầu ra đặc biệt (như tên tệp) cùng với thông báo, vì vậy người ta có thể đăng nhập vào các tệp tùy chỉnh mà không cần cấu hình lại hệ thống (người dùng thông thường) không được phép làm gì).

Các vấn đề liên quan