-
Notifications
You must be signed in to change notification settings - Fork 239
/
head.h
66 lines (52 loc) · 2.18 KB
/
head.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
### head.h start
set -e # stop the shell on first error
set -u # fail when using an undefined variable
set -x # echo script lines as they are executed
# Defines the variables that are needed for any communication with ECF
export ECF_PORT=%ECF_PORT% # The server port number
export ECF_HOST=%ECF_HOST% # The name of ecf host that issued this task
export ECF_NAME=%ECF_NAME% # The name of this current task
export ECF_PASS=%ECF_PASS% # A unique password
export ECF_TRYNO=%ECF_TRYNO% # Current try number of the task
export ECF_RID=$$ # record the process id. Also used for zombie detection
# Define the path where to find ecflow_client
# make sure client and server use the *same* version.
# Important when there are multiple versions of ecFlow
#export PATH=....:$PATH
# Tell ecFlow we have started
ecflow_client --init=$$
# Define a error handler
handle_error() {
set +e # Clear -e flag, so we don't fail
wait # wait for background process to stop
ecflow_client --ping --host=${ECF_HOST} --port=${ECF_PORT}
not_running=$?
if [[ $not_running -eq 0 ]]; then
export ECF_TIMEOUT=5
ecflow_client --abort=error # Notify ecFlow that something went wrong, using 'trap' as the reason
fi
sleep 5
trap 0 # Remove the trap
exit 0 # End the script
}
# Define a signal handler
handle_signal() {
set +e # Clear -e flag, so we don't fail
jobs -l
[[ -z "$(jobs -p)" ]] || kill $(jobs -p)
wait # wait for background process to stop
ecflow_client --ping --host=${ECF_HOST} --port=${ECF_PORT}
not_running=$?
if [[ $not_running -eq 0 ]]; then
export ECF_TIMEOUT=5
ecflow_client --abort=trap # Notify ecFlow that something went wrong, using 'trap' as the reason
fi
sleep 5
trap 0 # Remove the trap
exit 0 # End the script
}
# Trap any calls to exit and errors caught by the -e flag
trap handle_error 0
# Trap any signal that may cause the script to fail
trap '{ echo "$0 Killed by a signal"; handle_signal ; }' 1 2 3 4 5 6 7 8 10 12 13 15
### head.h end