Logrotate.d for every httpd instance for loop?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Logrotate.d for every httpd instance for loop?
# 1  
Old 02-09-2016
Logrotate.d for every httpd instance for loop?

/etc/logrotate.d

Code:
-rwxr-xr-x 1 root root 263 Aug 28 23:17 httpd-stooffsprod
-rwxr-x--- 1 root root 273 Jul 10  2015 httpd-mwsi2hprodhist2
-rwxr-x--- 1 root root 261 Aug 11 17:28 httpd-mwsihist2
-rwxr-x--- 1 root root 269 Jul 20  2015 httpd-mwsiprodhist2


I need to figure out how to build a for loop script that will create a file with this content in each of the files but replace the httpd-(fill in the blank) with every instance of httpd in the /apps/apache/ directory?

Code:
/apps/apache/httpd-capefsprod/logs/*log {
    rotate 7
    compress
    missingok
    notifempty
    sharedscripts
    daily
    delaycompress
    nomail
    postrotate
        /sbin/service httpd-stoofsprod reload > /dev/null 2>/dev/null || true
    endscript
}

Moderator's Comments:
Mod Comment Please use CODE tags as required for forum rules. Continued refusal to appropriately format your posts may result in you being banned from this site.

Last edited by Don Cragun; 02-10-2016 at 08:22 PM.. Reason: Add CODE and ICODE tags.
# 2  
Old 02-22-2016
I apologize for not doing the formatting properly. Still no answers?

---------- Post updated at 08:48 AM ---------- Previous update was at 08:46 AM ----------

I created this forloop, to create the file from a template file but I don't know how to do the awk inside the file to change the name to match up, to all the instances in the /apps/apache/ directory? Any help?

Code:
#!/bin/bash
#set -xv
#####################################################
#                                                   #
#   Script                   #
#  
#                                                   #
#####################################################
# End Summary                                        

list=`cat /usr/local/scripts/aplist.txt`
clear
for i in $list;
do
cp /etc/logrotate.d/httpd-test /etc/logrotate.d/$i

echo " "

done;

# 3  
Old 02-22-2016
If you would show us sample input files and the corresponding output you are trying to produce based on those input files, you would have a much better chance of getting a response.
# 4  
Old 02-22-2016
I still don't get it.
The /apps/apache/httpd-capefsprod/logs/*log is a key and may only exist once.
It cannot be copied to other files in logrotate.d/
For the same reason a template file may not be located there.
# 5  
Old 03-04-2016
Maybe from this you can tell what I'm attempting at. I'm trying to get a list of all the jvm's running on webservers and then create a logrotated file for each one. However if the file already exist in /etc/logrotated/ I don't want to over write it, want to skip the existing. Then inside the file I'm trying to replace for each one the hostname inside the file.

Code:
ls -d /apps/apahce/*httpd* >/usr/local/scripts/jvmlist.txt 
jvmlist=`/usr/local/scripts/jvmlist.txt`
clear
for name in $jvmlist
  do
     
	if [ ! -f /etc/logrotated/$name cp /usr/local/scripts/examplescript.txt ]; then cp /usr/local/scripts/examplescript.txt /usr/local/scripts/stage/$name
	 
	cd /usr/local/scripts/stage/
	
	sed -i 's/examplehost/$name/g' /usr/local/scripts/stage/$name


Last edited by xgringo; 03-04-2016 at 02:56 PM..
# 6  
Old 03-04-2016
Quote:
Originally Posted by xgringo
Maybe from this you can tell what I'm attempting at. I'm trying to get a list of all the jvm's running on webservers and then create a logrotated file for each one. However if the file already exist in /etc/logrotated/ I don't want to over write it, want to skip the existing. Then inside the file I'm trying to replace for each one the hostname inside the file.

Code:
ls -d /apps/apahce/*httpd* >/usr/local/scripts/jvmlist.txt 
jvmlist=`/usr/local/scripts/jvmlist.txt`
clear
for name in $jvmlist
  do
     
	if [ ! -f /etc/logrotated/$name cp /usr/local/scripts/examplescript.txt ]; then cp /usr/local/scripts/examplescript.txt /usr/local/scripts/stage/$name
	 
	cd /usr/local/scripts/stage/
	
	sed -i 's/examplehost/$name/g' /usr/local/scripts/stage/$name

There are several problems here:
  1. A for loop requires a do and a done. You have no done.
  2. An if statement requires a then and a fi. You have no fi.
  3. Shell variables are not expanded inside single quotes. And, since $name will expand to a string containing slash characters (/), you can't use slash as the separator in the sed substitute command. Use double quotes instead of single quotes around your sed program and use vertical bar (AKA pipe symbol) or some other character that won't appear in any expansion of $name instead of slash.
  4. Your for loop will execute once (with $name expanding to the name of the file that contains the names you want to process); not once for each file you want to process (with $name expanding to the name of a file you want to process). And, there is no need for a temporary file here. And, if you're going to define a variable specifying the name of your temporary file, define that variable before you have the name hardcoded into other commands and use the variable name consistently.
  5. Do you really have a directory named /apps/apahce? Or should it be /apps/apache?
  6. The three arguments /etc/logrotated/$name cp /usr/local/scripts/examplescript.txt cannot match the name of a regular file because the test -f (AKA [ -f ... ] command in your if statement expects one operand; not three.
Making lots and lots of wild assumptions, maybe something more like:
Code:
ls -d /apps/apache/*httpd* | while read -r name
do	if [ ! -f "/usr/local/scripts/stage$name" ]
	then	sed 's|examplehost|$name|g' /usr/local/scripts/examplescript.txt > "/usr/local/scripts/stage$name"
	fi
done

# 7  
Old 03-08-2016
Thanks for your patience in advance.

Code:
[root@/usr/local/scripts]# ls -ltr
-rwxrwxrwx 1 root root  253 Mar  8 09:41 examplelogconfig
drwxr-xr-x 2 root root 4096 Mar  8 09:51 stage
-rwxrwxrwx 1 root root  276 Mar  8 10:13 logrot.sh

[root@/apps/apache]# ls -ltr
drwxr-x--- 9 awdmw awdmw 4096 Jul 19  2013 httpd-fibcbeta
drwxr-x--- 9 awdmw awdmw 4096 Jul 19  2013 httpd-fibctrain
drwxr-x--- 9 awdmw awdmw 4096 Oct 17  2013 httpd-gundsdev
drwxr-x--- 9 awdmw awdmw 4096 Oct 31  2013 httpd-gundstrain
drwxr-x--- 9 awdmw awdmw 4096 Feb 21  2014 httpd-dliqat
drwxr-xr-x 9 awdmw awdmw 4096 Mar 11  2014 httpd-dlidev
drwxr-x--- 9 awdmw awdmw 4096 Apr  1  2014 httpd-dliuat
drwxr-x--- 9 awdmw awdmw 4096 Apr  2  2014 httpd-dlitrain

[root@uxtwsadcmrk01 logrotate.d]# ls –ltr

-rw-r--r--. 1 root root 329 Jul 10  2012 psacct
-rw-r--r--. 1 root root 540 Aug 30  2012 syslog
-rw-r--r--  1 root root  32 Nov  6  2012 up2date
-rwxr-x---  1 root root 259 Jul 19  2013 httpd-fibcbeta
-rwxr-x---  1 root root 261 Jul 19  2013 httpd-fibctrain
-rwxr-x---  1 root root 259 Oct 17  2013 httpd-gundsdev


The examplelogconfig in the usr/local/scripts dir and the httpd-fibcbeta in the logrotate.d are the same file, I was just trying to use teh exampleconfig, and look through the /apps/apache/ directory see which names are there, and then create a file for each one in the /etc/logrotate.d directory except change the host name. The caviat is I can't just put them in production so I have to put them in /usr/local/scripts/stage/ directory for later putting them in production. I have a ton of boxes to do this on, with normally a bunch of instances of jvms etc in /apps/apache/ and not much in /etc/logrotate.d ---- if this were just a few not a big deal but there are a ton of webs for me to do etc.
Code:
Cat httpd-fibctrain

/apps/apache/httpd-fibctrain/logs/*log {
    rotate 7
    compress
    missingok
    notifempty
    sharedscripts
    daily
    delaycompress
    nomail
    postrotate
        /sbin/service httpd-fibctrain reload > /dev/null 2>/dev/null || true
    endscript
}

Code:
[root@/usr/local/scripts]# cat examplelogconfig
/apps/apache/examplehost/logs/*log {
    rotate 7
    compress
    missingok
    notifempty
    sharedscripts
    daily
    delaycompress
    nomail
    postrotate
        /sbin/service examplehost reload > /dev/null 2>/dev/null || true
    endscript
}

So I was trying to say

if the directory exist in /apps/apache/*httpd* then create a file from the exampleconfig for each instance that (doesn't already exist) in /etc/logrotate.d/ directory and then change out the example host in the file with the hostname of the /apps/apache/*httpd* name and place a copy of that new example config named httpd- into /usr/local/scripts/stage/

Last edited by xgringo; 03-08-2016 at 11:55 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Loop to run commands - after the previous instance completed

Hi All, I am trying to call a shell script in a loop. I want my first instance to complete, and then the 2nd instance of the command to start - and so on. eg. I am running this script 30 times. The wrapper script needs business date, from_time,to_time & server_name as inputs. script_name... (2 Replies)
Discussion started by: neil.k
2 Replies

2. UNIX for Dummies Questions & Answers

Logrotate configuration

Hi all, i would like to have a configuration on log rotate that will gzip my log files with date pattern %Y-%m-%d move these files to an olddir, but i want to avoid that the logrotate removes my files from old dir newer than 180 days i applyied this config #logrotate config to compress files... (3 Replies)
Discussion started by: charli1
3 Replies

3. AIX

Logrotate - /etc/logrotate.conf does't exist

Hi Admins. I have installed logrotate rpm on Aix 6.1. After the installation of rpm, I don't find /etc/logrotate.conf file and /etc/logrotate.d dir . The config file is located in /opt/freeware/etc/logrotate.conf. When I ran logrotate -v /opt/freeware/etc/logrotate.conf I get below... (2 Replies)
Discussion started by: snchaudhari2
2 Replies

4. Shell Programming and Scripting

Logrotate - I am not able to rotate files using logrotate

I have written script which is working in Home directory perfectly and also compressing log files and rotating correctly. But, when i try to run script for /var/log/ i am able to get compressed log files but not able to get rotation of compressed log files. Please suggest. I am using below command... (5 Replies)
Discussion started by: VSom007
5 Replies

5. Red Hat

Logrotate on RHEL 5

Hi All, Can any one let me me know if i run /usr/sbin/logrotate /etc/logrotate.conf will it read the whole /var/log/messages or it just see the time stamp of message file & then rotate the logs. Just wants to know is logrotation based on messages file contents or messages file time stamp. ... (1 Reply)
Discussion started by: ajaincv
1 Replies

6. Linux

LogRotate

Hi I am trying to rotate specific log by using logrotate function in unix I have made following entry in the /etc/logrotate.conf file /var/log/testlog/debug_log { daily rotate 7 create compress } But only issue is that my other logs like /var/log/messages,... (2 Replies)
Discussion started by: SiddhV
2 Replies

7. Red Hat

logrotate httpd logfiles

Hi, I need to logrotate logs in directories in /var/log/httpd/. There are 4 directories in /var/log/httpd/... these directories are /var/log/httpd/access/ /var/log/httpd/debug/ /var/log/httpd/error/ /var/log/httpd/required/ Each of the access, required, error and debug directories have around... (1 Reply)
Discussion started by: renuka
1 Replies

8. UNIX for Advanced & Expert Users

logrotate with /etc/logrotate.conf file

Hi there, I want to rotate the logfiles which are located in /var/log/jboss/tomcat* so I have created a file named as 'tomat' in /etc/logrotate.d/tomcat with the following content. # cat /etc/logrotate.d/tomcat /var/log/jboss/tomcat_access_log*.log { daily nocreate ... (2 Replies)
Discussion started by: skmdu
2 Replies

9. Shell Programming and Scripting

[PHP] endless loop mimics a cron. Make sure only one instance is running

Hi, PHP user here. I'm using an endless loop to perform to mimic a cron. The script does something every 20 minutes. It sleep()s in the meantime. I have various checks that ensure that only instance can run, including a "gentleman agreement" locked file. However, I'd like to make sure... (2 Replies)
Discussion started by: jjshell
2 Replies

10. Shell Programming and Scripting

replace first instance(not first instance in line)

Alright, I think I know what I am doing with sed(which probably means I don't). But I cant figure out how to replace just the first occurance of a string. I have tried sed, ed, and grep but can't seem to figure it out. If you have any suggestions I am open to anything! (3 Replies)
Discussion started by: IronHorse7
3 Replies
Login or Register to Ask a Question