I have a main script(main.ksh) within which I have called another script(sub.ksh). The sub.ksh script is made to run in the background using '&'. The main.ksh script logs the information in a logfile main_ddmmyy and the sub.ksh script also logs the information in the log file sub_ddmmyy. This sub.ksh script will take long time to execute.
My problem arises here. Since the sub.ksh script is executed at the background,I started another process(new.ksh) in the foreground. The new.ksh also logs the information in main_ddmmyy file . The new.ksh script is executed properly and logs the information in its log file, but the sub.ksh script is not logging the information in its logfile when I have process both in foreground and background. If I don't start the process(new.ksh),the information from the background script(sub.ksh) is logged properly.
Hope I have made you clear.
I am not able to figure out where the problem is. Please help me on it.
It sounds like the two functions are logging to the same logfile?
If so, make sure both are using >> rather than > so the entries get interleaved.
Alternativly, give them different logs to write to.
Thanks for the reply.
I don't have any problem in logging into same file. But the background process fails to log the information in its log file when I have a foreground process running which logs the information in different file. I want to make clear that the foreground and background process are not logging the information in the same file.
Main.ksh - Main_ddmmyy(Foreground)
Sub.ksh - Sub_ddmmyy(background process)
New.ksh - Main_ddmmyy(Foreground)
The problem is with logging the sub_ddmmyy file.
Redirection can get tricky, which is why I add this code to any of my scripts that run in the background or unattended:
After this line, all output (stdout and stderr) will go to a file in /tmp using the program basename with a ".log" extension. Don't try this from the command line!
UPDATE: I actually use a base set of code for background jobs:
Note that the shell expression "${0##*/}" is the same as "basename $0". Also, the "[[ -t ]]" should return TRUE when the process is attached to a terminal. In this case, it just prints a message about the logfile (instead of having the user wonder if the script is even running).
I also close stdin since an unattended script should never need input. For instance, if you have "grep $FILENAME" or "cat $FILENAME" and a bug has left $FILENAME unset, then the script would normally hang waiting for input from stdin. If that input is already /dev/null then the script can continue.
Redirection can get tricky, which is why I add this code to any of my scripts that run in the background or unattended:
After this line, all output (stdout and stderr) will go to a file in /tmp using the program basename with a ".log" extension. Don't try this from the command line!
Hi,
I have written a menu driven shell script in which as per the choice, I run the another script on background.
For eg:
1. get info
2)process info
3)modify info
All the operations have different scripts which i schedule in background using &.
However I wish to display the error... (0 Replies)
Hi,
I am using net::ftp for transferring files now i am trying in the same Linux server as a result ftp is very fast but if the server is other location (remote) then the file transferred will be time consuming.
So i want try putting FTP part as a background process. I am unaware how to do... (5 Replies)
What I need to learn is how to use a script that launches background processes, and then kills those processes as needed.
The script successfully launches the script. But how do I check to see if the job exists before I kill it?
I know my problem is mostly failure to understand parameter... (4 Replies)
I need to submit a script that will continue to run after logging out and after a reboot or shutdown.
I entered the following: nohup script &
The script continues to run in the background after logging off the system but is killed after a reboot or shutdown. Any help would be greatly... (1 Reply)
If I run a process in the back ground like
find . -name "abc" &
after the process is complete we get a msg like
+ Done find . -name "abc" &
Is it possible to redirect this msg to /dev/null
Thanks for your help (1 Reply)
Hi,
In shell script when I use
script1 >> filelog
the echo statments of script1 gets printed in the filelog
but when I try to run script in background i.e,
script1 & >> filelog
nothing gets printed in the filelog.
Anybody knows whats going on here.
thanks (3 Replies)
Hi Guys,
I am facing some weird problem with my shell script. The script shows up a menu and for every ontion internally calls a shell script which start/stop various servers. When I am using '&' while calling the internal shell script so that the server run in the background. For exiting... (1 Reply)
Hello all,
How do I start a background process and save the process id to a file on my system. For example %wait 5 & will execute and print the process id. I can't figure out how to get it to a file. I've tried: > filename 0>filename 1>filename.
Any assistance is most appreciated.
Thanks,
Jim... (10 Replies)