2013-03-27 9 views
9

मैंने अपने अनुप्रयोग लॉग के लिए घुमाए जाने के लिए "logrotate.d" निर्देशिका में दो स्क्रिप्ट जोड़ दीं। यह उनमें से एक के लिए config है:लॉग्रोटेट क्रॉन जॉब कुछ लॉग घूर्णन नहीं करता

<myLogFilePath> { 
    compress 
    copytruncate 
    delaycompress 
    dateext 
    missingok 
    notifempty 
    daily 
    rotate 30 
} 

वहाँ "cron.daily" निर्देशिका (जो क्रॉन लॉग के अनुसार रोज चलने किया जा रहा है) में एक "logrotate" स्क्रिप्ट है:

#!/bin/sh 

echo "logrotate_test" >>/tmp/logrotate_test 
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error 

EXITVALUE=$? 
if [ $EXITVALUE != 0 ]; then 
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" 
fi 
exit 0 

पहला गूंज कथन काम कर रहा है।
लेकिन मैं अपने आवेदन लॉग लगता है अकेले, घुमाया जा रहा नहीं कर रहे हैं, जबकि httpd जैसे अन्य लॉग घुमाया जा रहा है **
** और मैं यह भी उल्लेख किया "logrotate_error" फ़ाइल
में किसी भी उत्पादन नहीं दिख रहा है (लेखन अनुमति की आवश्यकता है सभी उपयोगकर्ताओ के लिए)।

हालांकि syslog का कहना है: "logrotate: चेतावनी के साथ असामान्य रूप से बाहर निकल गया [1]"

लेकिन जब मैं में एक ही "logrotate" रन "cron.daily" स्क्रिप्ट मैन्युअल रूप से, सब कुछ काम कर ठीक लग रहा है।

दैनिक क्रॉन शेड्यूल के दौरान घूमना क्यों नहीं है? क्या मुझसे यहां कुछ गलत हो रहा है?
यदि मुझे यह बहुत आवश्यक सहायता मिलती है तो यह बहुत अच्छा होगा।

UPDATED: ऐसा लग रहा है, यह SELinux की वजह से है - मेरे उपयोगकर्ता घर निर्देशिका में लॉग फाइल प्रतिबंध SELinux द्वारा लगाए गए है और जब logrotate स्क्रिप्ट चलाने है:

SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log 

उत्तर

10

SELinux सीमित था निर्देशिका में लॉग फ़ाइलों पर लॉग्रोटेट तक पहुंच, जिसमें आवश्यक SELinux फ़ाइल संदर्भ प्रकार नहीं है। "/ var/log" निर्देशिका में "var_log_t" फ़ाइल संदर्भ है, और logrotate आवश्यक करने में सक्षम था। तो समाधान इसे मेरे अनुप्रयोग लॉग फ़ाइलों और इसे मूल निर्देशिका पर सेट करना था:

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
5

मुझे एक ही समस्या थी।

# sestatus 
SELinux status:     enabled 
SELinuxfs mount:    /selinux 
Current mode:     enforcing 
Mode from config file:   enforcing 
Policy version:     24 
Policy from config file:  targeted 

फिर, SELinux सुरक्षा संदर्भ फ़ाइलों और निर्देशिकाओं --scontext ls का उपयोग कर के लिए लागू की जाँच करें: इसके समाधान के लिए, मैं पहले SELinux की स्थिति sestatus आदेश का उपयोग कर जाँच की। semanage

# ls --scontext /var/log/maillog* 
system_u:object_r:var_log_t:s0 /var/log/maillog 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140713 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140720 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140727 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140803 

उपयोग फ़ाइल संदर्भ बदलने के लिए: फ़ाइलों को आप पर काम करते हैं, और फ़ाइलों है कि इस तरह के रूप में/var/log/maillog, काम कर रहे हैं की जाँच करने के logrotate चाहते हैं।

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
2

बस ऊपर सामान्यीकरण और यह सुनिश्चित करें एक ही SELinux संदर्भ ठीक से भविष्य की सभी फ़ाइलों के लिए सेट किया गया है करने के लिए:

semanage fcontext -a -t var_log_t "<directory>(/.*)?" 
restorecon -v <directory> 
0

मैं SELinux के साथ इस मुद्दे को विकलांग देखा है और यह था, क्योंकि लॉग की पेरेंट निर्देशिका फ़ाइल घुमाया जा रहा है वैश्विक लिखने की अनुमति जो logrotate द्वारा स्वागत नहीं है

error: skipping "/xxx/yyy/log/logfile.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. 

chmod 755 करने के लिए मूल निर्देशिका समस्या हल हो जाती है

# logrotate --version 
logrotate 3.8.6 
0

SELinux निर्देशिका साइटों पर पढ़ने के लिए पहुंच से रोक रहा है/usr/sbin/logrotate।

***** प्लगइन मोहक (100 आत्मविश्वास) से पता चलता ***************************

आप तो मान लें कि लॉगऑरेट को डिफ़ॉल्ट रूप से साइट निर्देशिका पर पढ़ने की अनुमति दी जानी चाहिए। फिर आपको इसे एक बग के रूप में रिपोर्ट करनी चाहिए। आप इस एक्सेस को अनुमति देने के लिए स्थानीय नीति मॉड्यूल जेनरेट कर सकते हैं।

को क्रियान्वित करते हुए अब के लिए यह उपयोग की अनुमति है:

# grep logrotate /var/log/audit/audit.log | audit2allow -M mypol 
# semodule -i mypol.pp 
+1

जहां इस से लिया जाता है? क्या आप इसे जोड़ सकते हैं? मैंने इसे गुगल किया है और मुझे इस तरह के कई संदेश दिखाई देते हैं, लेकिन मुझे स्रोत नहीं मिल रहा है। क्या यह डिफ़ॉल्ट संदेश है जो SELinux देता है? –

संबंधित मुद्दे