determine if the script has been invoked manually or not?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting determine if the script has been invoked manually or not?
# 1  
Old 05-14-2007
determine if the script has been invoked manually or not?

Hi,

Is there a way to determine if the script has been invoked manually or not( might be invoked by a schedular or crontab)?

Thanks,
# 2  
Old 05-14-2007
This is only a heuristic.

Within your script see if you have the env variable TERM available or not.

If the script is run manually, then you would need some kind of terminal to invoke it from. If it is run from a crontab, it would not require a terminal (atleast thats what I think).

Check it out.
# 3  
Old 05-14-2007
You can check if the process is associated/connected to terminal.
For example this is with lsof on Linux:

Note the terminal devices (pts):

Code:
$ lsof -p 10716
COMMAND   PID   USER   FD   TYPE DEVICE     SIZE   NODE NAME
bash    10716 oracle  cwd    DIR  72,17     4096  32705 /app/oracle
bash    10716 oracle  rtd    DIR  253,0     4096      2 /
bash    10716 oracle  txt    REG  253,0   616248 393573 /bin/bash
bash    10716 oracle  mem    REG  253,0    45889 491876 /lib/libnss_files-2.3.4.so
bash    10716 oracle  mem    REG  253,0   106397 491564 /lib/ld-2.3.4.so
bash    10716 oracle  mem    REG  253,0  1454802 229472 /lib/tls/libc-2.3.4.so
bash    10716 oracle  mem    REG  253,0    15324 491856 /lib/libdl-2.3.4.so
bash    10716 oracle  mem    REG  253,0    12592 491892 /lib/libtermcap.so.2.0.8
bash    10716 oracle  mem    REG  253,0    21544 262456 /usr/lib/gconv/gconv-modules.cache
bash    10716 oracle  mem    REG  253,0 48504432 132692 /usr/lib/locale/locale-archive
bash    10716 oracle    0u   CHR  136,2               4 /dev/pts/2
bash    10716 oracle    1u   CHR  136,2               4 /dev/pts/2
bash    10716 oracle    2u   CHR  136,2               4 /dev/pts/2
bash    10716 oracle  255u   CHR  136,2               4 /dev/pts/2

This is from cron:

Code:
$ lsof -p 10673
COMMAND   PID   USER   FD   TYPE DEVICE    SIZE   NODE NAME
sleep   10673 oracle  cwd    DIR  72,17    4096  32705 /app/oracle
sleep   10673 oracle  rtd    DIR  253,0    4096      2 /
sleep   10673 oracle  txt    REG  253,0   17340 394503 /bin/sleep
sleep   10673 oracle  mem    REG  253,0   93985 229474 /lib/tls/libpthread-2.3.4.so
sleep   10673 oracle  mem    REG  253,0   47671 232047 /lib/tls/librt-2.3.4.so
sleep   10673 oracle  mem    REG  253,0  106397 491564 /lib/ld-2.3.4.so
sleep   10673 oracle  mem    REG  253,0 1454802 229472 /lib/tls/libc-2.3.4.so
sleep   10673 oracle  mem    REG  253,0  178019 229504 /lib/tls/libm-2.3.4.so
sleep   10673 oracle    0r  FIFO    0,7         267166 pipe
sleep   10673 oracle    1w  FIFO    0,7         267167 pipe
sleep   10673 oracle    2w  FIFO    0,7         267167 pipe

On Solaris with ptree:

Code:
$ ptree 29948
514   /usr/sbin/cron
  29939 sh -c /app/oracle/admin/xxxx/xxxxxx.ksh
    29948 /bin/ksh /app/oracle/admin/xxxx/xxxxxx.ksh
      72    ftp -i -n -v

You can play with pstree, strace (Linux), ptree, pfiles, truss (Solaris) as well.
And of course, I suppose there will be special cases.
# 4  
Old 05-14-2007
Hi.

I usually use the very old command tty. This script creates a little shell script that demonstrates tty. It calls the created script directly, and then runs it as an "at" job. The results of at jobs are mailed to you.
Code:
#!/bin/sh

# @(#) s1       Demonstrate tty.

echo " sh version: $BASH_VERSION"

cat >test-tty.sh <<EOF
#!/bin/sh

if tty -s
then
        echo " STDIN is connected to a terminal."
else
        echo " STDIN is NOT connected to a terminal."
fi
EOF

echo
chmod +x test-tty.sh
./test-tty.sh

echo
at -f ./test-tty.sh now

exit 0

Which, when run, produces:
Code:
% ./s1
 sh version: 2.05b.0(1)-release

 STDIN is connected to a terminal.

warning: commands will be executed using /bin/sh
job 14 at 2007-05-14 06:52

and here is the email message:
Code:
From drl@leap  Mon May 14 06:52:58 2007
Subject: Output from your job       14
To: drl@leap
Date: Mon, 14 May 2007 06:52:58 -0500 (CDT)
Status: R

 STDIN is NOT connected to a terminal

See man tty for details ... cheers, drl
# 5  
Old 05-14-2007
I use this paradigm:
Code:
#!/bin/ksh
# determine if there's a controlling tty for this run of the script.
# if there's none, it means we're running from 'cron' 
if [ -t 0 ] ; then
   inputTERM="I have a controlling terminal => I ain't from cron"
fi;


Last edited by vgersh99; 05-14-2007 at 10:26 AM..
# 6  
Old 05-15-2007
Quote:
Originally Posted by hitmansilentass
Is there a way to determine if the script has been invoked manually or not( might be invoked by a schedular or crontab)?
May be I misread the question,
I thougth the OP wanted to check from the outside.
# 7  
Old 05-15-2007
Quote:
Originally Posted by radoulov
May be I misread the question,
I thougth the OP wanted to check from the outside.
There's only one way to find out, ain't it - that is if the OP follows up with his/her/its postings!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script runs manually, but not from cron

Hi, I "borrowed" a script I found online, to start a SAP router application on a Solaris 11 (SPARC) server. The script runs fine when calling it manually, but when I schedule it to run from cron, it doesn't. I don't see any warning or failure messages anywhere, just nothing happens. ... (11 Replies)
Discussion started by: bredman
11 Replies

2. Shell Programming and Scripting

Oracle function invoked from shell script doubt

hi gurus, I have tried myself to invoke an oracle function. there are three different function available need to be called for differnt. can you tell me whether the below code is correct to call oracle function from shell script. Any help would be highly appreciated. cat location.sh ... (5 Replies)
Discussion started by: arun888
5 Replies

3. Shell Programming and Scripting

Problem with script invoked from a keyboard shortcut

-EDIT- I have solved my problem below by using a different program. Instead of xsel I am using xclip which basically does the same thing and works fine from a script invoked by a global hotkey. -END EDIT- Hi, I've written a simple script to copy my email address into both the... (0 Replies)
Discussion started by: gencon
0 Replies

4. Shell Programming and Scripting

How to ensure a script can only be invoked from another?

Hi All, I have two scripts - ScriptA and ScriptB ScriptA has logic to invoke ScriptB : - with some parameter - or without any parameter ScriptB can also be invoked by the user from the command line. Is there anyway to ensure that when I execute ScriptB from the command line, it does... (3 Replies)
Discussion started by: chaitanya.gvc
3 Replies

5. Shell Programming and Scripting

CRON: Script not getting invoked

Hi, I have the following script - fixpart="/files/myScript # Transfer Script" echo "Specify the transfer frequency in minutes - " echo "every 1, 2, 3, or 5 minutes (default every 1 minute) " echo $nn "Frequency ? :" $cc read ans case $ans in 2) echo... (9 Replies)
Discussion started by: angshuman_ag
9 Replies

6. UNIX for Advanced & Expert Users

why the script name not displayed and not sh invoked?

Say there is a shell script named test.sh. I intentionally omit the #! line in test.sh for testing perpose. I did the following : $ echo $0 -ksh ---> current shell $ echo $$ 12919 ---> PID of the current shell... (4 Replies)
Discussion started by: hongwei
4 Replies

7. UNIX for Advanced & Expert Users

Passing the values to the secondary script when it invoked by primary script

Hi, When I invoke a script s1.sh it will call an another script s2.sh by itself. This script s2.sh will call some java files, so while running the script it asks for a file name to be processed. Which we can see in the screen. The file name to be processed is present in script s1.sh Now I... (2 Replies)
Discussion started by: venu_eie
2 Replies

8. Shell Programming and Scripting

Passing the values to the secondary script when it invoked by primary script

Hi, When I invoke a script s1.sh it will call an another script s2.sh by itself. This script s2.sh will call some java files, so while running the script it asks for a file name to be processed. Which we can see in the screen. The file name to be processed is present in script s1.sh Now... (1 Reply)
Discussion started by: venu_eie
1 Replies

9. Shell Programming and Scripting

check in unix shell script so that no one is able to run the script manually

I want to create an automated script which is called by another maually executed script. The condition is that the no one should be able to manually execute the automated script. The automated script can be on the same machine or it can be on a remote machine. Can any one suggest a check in the... (1 Reply)
Discussion started by: adi_bang76
1 Replies

10. Shell Programming and Scripting

Can run script Manually, but not through Cron?

Hi all, I have a main script (called OracleCleanup) that runs some sql queries. that runs off a wrapper script which contains the sources for the login information and and JOB_HOME (the script is below). When I schedule this job in the cron the log says that it cannot open my list file, which... (4 Replies)
Discussion started by: MadHatter
4 Replies
Login or Register to Ask a Question