Script for Deleting a process which exist every day in hold state

Hi All ,

There always exist one process in hold state every day which will cause savior impact if i didn't kill it.

i will do it manually . Manul process is this.

sudo -iu  root/opt/app/root/cdlinux/ndm/bin/direct -- it will take me connect direct prompt

Sel proc ;   -- it will displays the process in hold stae (0nly one process every day )

del proc process id ;  -- deletes the process

i want the above maual process to automate.

So i tried to write a script to delete the process automatically .
i am very basic learner in scripting (say 10 days )
But i read about most of the commands and prepared to write a script

Here is my script read status

read pname
sudo -iu p1ccp1m5 /opt/app/p1ccp1m5/cdlinux/ndm/bin/direct
status=sel proc;
if [ "$status" == Select Process Completed Successfully ] 
then
exit
else
pname = awk { print $2 }
del proc pnum = $pname ;
echo -e " Process with $pname deleted successfully"
fi

But it is not working .. even not showing any errors

can any one suggest here what are the mistakes and i need to learn .

Thanks in advance .

To keep the forums high quality for all users, please take the time to format your posts correctly.

First of all, use Code Tags when you post any code or data samples so others can easily read your code. You can easily do this by highlighting your code and then clicking on the # in the editing menu. (You can also type code tags

```text
 and 
```

by hand.)

Second, avoid adding color or different fonts and font size to your posts. Selective use of color to highlight a single word or phrase can be useful at times, but using color, in general, makes the forums harder to read, especially bright colors like red.

Third, be careful when you cut-and-paste, edit any odd characters and make sure all links are working property.

Thank You.

The UNIX and Linux Forums

A couple basic errors:

1) You can't assign commands to variables like variable=command argument What that actually does is set variable to command then attempts to run argument. I think what you meant was variable=$(command argument)

2) You can't put spaces around equal signs when assigning variables. var = this is wrong, var=this is correct.

3) You can't run /opt/app/p1ccp1m5/cdlinux/ndm/bin/direct and expect to run shell code inside it.

4) read does not need a $ for variables, but everything else does. Use ${variablename} when you want a variable to be substituted.

I think what you need is a shell script which prints the following text:

Sel proc ;
del proc process id ;

...and feeds it into that command.

Try just this:

sudo -iu  root/opt/app/root/cdlinux/ndm/bin/direct <<EOF
Sel proc ;
del proc process id ;
EOF

This bit:

<<EOF
...
EOF

is called a "here document", and is similar to typing that input into the command with a keyboard. You can substitute variables into it.

...replacing 'proc' and 'process id' with whatever you need to, of course. If that works, we can improve it from there.

2 Likes

Thank you corona..

sudo -iu  root/opt/app/root/cdlinux/ndm/bin/direct <<EOF Sel proc ;
EOF

After this i got output like the attached image (i did manually to show thw output)

So now i need to delete the process using the NUMBER 18062

Here can i use awk command to get the NUMBER and assign the output to a variable like

read NUMBER
NUMBER=$(awk '{print $2}')
del proc $NUMBER

Please suggest ..

Thanks in advance .

sudo -iu  root/opt/app/root/cdlinux/ndm/bin/direct <<EOF
read status
read number
status=$(sel proc);
if[("$status " == Select Process Completed Successfully ]
then
exit
else
number=$(awk '{print $2}')
del proc $number;
echo "process deleted successfully"
fi
EOF

Is this code is correct ? select process completed successfully is the message I will get if no one process is in hung state

please guide me

Thank you so much for quick response

Hi Every One ,

My requirement is to delete a process automatically that occurs every day ..

The process is in

/opt/app/root/cdlinux/ndm/bin/direct

path and

sel proc

is the command to
check the process wheather the process existed or not ..

So i wrote below script for that .. but it is not working ..

Anybody can help me in this .

Thanks

sudo -iu  root/opt/app/root/cdlinux/ndm/bin/direct <<EOF 
 read status read number 
 status=$(sel proc); 
 if[("$status " == Select Process Completed Successfully ] then 
   exit 
 else 
     number=$(awk '{print $2}') 
    del proc $number; 
    echo "process deleted successfully" 
 fi 
EOF

I edited your code - but if you ran the code as a one-liner it would never work as written.
Please check that my edit renders you code correctly because there are still errors.

Please tell us what error you get. Plus I do not know the del command which is possible if it is an alias or something new for your OS or part of direct .

Hi Jim ,

i am not getting any error .. when i run this script is running continuously .. so i am stopping it manually ..

Yes ,

del

command is related to direct to delete the process.

I have merged your two directly related threads. Please continue to use this thread.

That specification is very difficult to interpret. Some comments to improve:

  • post the full error messages or strange behaviour in lieu of "did not work"
  • post sample files (in code tags) instead of pictures so people can work on them
  • explain what uncommon programs (sel? del?) do; give success and failure output

I don't know a thing about "direct" nor "sel proc". If the output of the latter is close to what you posted as an image, this might be a starting point for you to taylor and improve:

number=$(sel proc | awk '/^--*$/ {getline; print $2; exit} /Successfully/ {print 0; exit}')
[ "$number" -eq 0 ] && echo "no hold state" || del proc $number

0 is a PID that will never occur so it seemed quite safe to use as the "token" to convey success.. Killing processes by script is a delicate thing so you should know exactly what you are doing, and you might want to build in other safety steps.