Solved

why is my command unable to append to a file?

Posted on 2014-03-24
4
262 Views
Last Modified: 2014-03-24
when i run the script directly then I am able to append to the variable [FileName] $logFile

script1.sh

!/bin/sh
IPA_LOG=${IPA_LOG:=/tmp/oli}
monitor="gf"
process_pid="10162"
cmd_array=("cat /proc/${process_pid}/status")
logFile=${IPA_LOG}/$monitor.log

 fileType="mem"
 cmd_array[1]="lsof -s -p $process_pid | awk '{ user = \$4 } { if ( user == \"$fileType\" ) { print } }' | sort -nrk 7 |  head -100"

        for i in "${cmd_array[@]}"
        do
         eval ${i} >> $logFile
        done
---------------------------------------------------------------------------------------------------
but if called thru chain of script:

!/bin/sh
#scriptA
...
..
start()
{
scriptB &
}

!/bin/sh
#scriptB
...
..
doSomething(){
script1 &
}

Now the script1 is unable to append to the logFile variable. I have tried changing the chmod and chown options. But no use.
0
Comment
Question by:pvinodp
  • 2
  • 2
4 Comments
 
LVL 48

Expert Comment

by:Tintin
ID: 39951834
How are you determining it isn't appending?  

Are there any error messages?

Is the IPA_LOG variable defined?

Add a

set -x

Open in new window


near the top of script1 and post the output.

BTW, I assume you typed the scripts here as they contain errors.  Always best to copy/paste.
0
 

Author Comment

by:pvinodp
ID: 39952243
ok. let me put it more clearly:
following is the outline of script1.sh.

!/bin/sh
pid=$1
type=$2

functionA(){

  while :
  do

    if[cpu_id -gt threshold_const]
    then
       for i in "${cmd_array[@]}"
        do
         eval ${i} >> $logFile
        done
    fi

  done
}

if [x$type == xgf]
then
#accordingly i populate the cmd_array and logFile variable
functionA
fi

if [x$type == xok]
then
#accordingly i populate the cmd_array and logFile variable
functionA
fi

If I call this script by passing the 2 arguments the logs are not appending. But I can see on the filesystem that the timestamp of the logFile is updated.

If i just remove all the code and just keep the following then I see that the logFile is appended.

!/bin/sh
IPA_LOG=${IPA_LOG:=/tmp/oli}
monitor="gf"
process_pid="10162"
cmd_array=("cat /proc/${process_pid}/status")
logFile=${IPA_LOG}/$monitor.log

 fileType="mem"
 cmd_array[1]="lsof -s -p $process_pid | awk '{ user = \$4 } { if ( user == \"$fileType\" ) { print } }' | sort -nrk 7 |  head -100"

        for i in "${cmd_array[@]}"
        do
         eval ${i} >> $logFile
        done


The only diffrence here is that the logFile is static and there is no while loop. Do u see any leak somewhere?
0
 
LVL 48

Accepted Solution

by:
Tintin earned 500 total points
ID: 39952253
Inside functionA

add

set -x

that way you can see exactly what it is attempting to do.
0
 

Author Comment

by:pvinodp
ID: 39952303
thanks for the input...
inside the function i have another line which has > instead of >>
thanks for suggesting to define "set -x" inside the function
0

Featured Post

Ransomware: The New Cyber Threat & How to Stop It

This infographic explains ransomware, type of malware that blocks access to your files or your systems and holds them hostage until a ransom is paid. It also examines the different types of ransomware and explains what you can do to thwart this sinister online threat.  

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction We as admins face situation where we need to redirect websites to another. This may be required as a part of an upgrade keeping the old URL but website should be served from new URL. This document would brief you on different ways ca…
Fine Tune your automatic Updates for Ubuntu / Debian
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question