Solved

why is my command unable to append to a file?

Posted on 2014-03-24
4
263 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

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

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

Suggested Solutions

SSH (Secure Shell) - Tips and Tricks As you all know SSH(Secure Shell) is a network protocol, which we use to access/transfer files securely between two networked devices. SSH was actually designed as a replacement for insecure protocols that sen…
Join Greg Farro and Ethan Banks from Packet Pushers (http://packetpushers.net/podcast/podcasts/pq-show-93-smart-network-monitoring-paessler-sponsored/) and Greg Ross from Paessler (https://www.paessler.com/prtg) for a discussion about smart network …
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.:
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…

830 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