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,
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,
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.
You can check if the process is associated/connected to terminal.
For example this is with lsof on Linux:
Note the terminal devices (pts):
$ 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:
$ 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:
$ 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.
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.
#!/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:
% ./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:
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
I use this paradigm:
#!/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;
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!
Hi.
A useful lesson on asking good questions and writing good requirements ... cheers, drl
is there any way to actually get the cron job's output onto a tty...can piping to /dev/tty help?