Why don't you keep them all in a single script, and start that at 01:30? Then it's much easier to see if the first subjob failed.
if in_pps_state_change.sh; then
in_pps_cos_change.sh
in_pps_usage_change.sh
fi
You could even run them with "at" if running them at a particular time is important. But then, you need to be sure that in_pps_state_change.sh finishes before the next job is due.
if in_pps_state_change.sh; then
# Todo: maybe die a horrible death if the time is already past 03:00
echo /u14/ods/scripts/in_pps_cos_change.sh | at 03:00
echo /u14/ods/scripts/iin_pps_usage_change.sh | at 04:30
fi
You should also take care to set the exit code properly from the script, so that the shell script which collects these can examine it.
I guess something like if OUT_STATUS is "Success" exit 0, otherwise some higher number (0 means success).
You are in control of the first shell script (and if not, create a wrapper script which you are in control of), so simply make it return success (zero) under the conditions when the second and third scripts can be run, and non-zero if not.
... still presuming that you manage to produce a proper exit code from the script so as to make this construction work. All proper shell scripts should behave like this, but it's not well understood by newbies.