1
1
#! /bin/bash
2
2
3
- SERVER_FQDN=" lithium.alvaone.net"
4
- TEMP_LOG=" /run/automountnfs"
5
- DATE_OPTS=" %a %b %d %H:%M %Y"
3
+ AMN_SERVER_FQDN=" lithium.alvaone.net"
4
+ AMN_TEMP_LOG=" /var/log/automountnfs"
5
+ AMN_DATE_OPTS=" %a %b %d %H:%M %Y"
6
+ AMN_CHECK=0
7
+ AMN_UNMOUNT=0
6
8
7
9
trap ' trap_abort' INT QUIT TERM HUP
8
10
trap ' trap_exit' EXIT
9
11
10
12
cleanup () {
11
- loge " Cleanup: $1 "
12
- [[ $1 ]] && exit $1
13
+ exit $1 || true
13
14
}
14
15
15
16
abort () {
@@ -23,21 +24,21 @@ trap_abort() {
23
24
}
24
25
25
26
trap_exit () {
26
- loge " Received exit..."
27
+ log " Received exit..."
27
28
trap - EXIT INT QUIT TERM HUP
28
29
cleanup
29
30
}
30
31
31
32
log () {
32
- echo -e ` date +" $DATE_OPTS " ` " : $1 " >> $TEMP_LOG
33
+ echo -e ` date +" $AMN_DATE_OPTS " ` " : $1 " >> $AMN_TEMP_LOG
33
34
}
34
35
35
36
loge () {
36
- echo -e ` date +" $DATE_OPTS " ` " : ERROR: $1 " >> $TEMP_LOG
37
+ echo -e ` date +" $AMN_DATE_OPTS " ` " : ERROR: $1 " >> $AMN_TEMP_LOG
37
38
}
38
39
39
40
logc () {
40
- echo -e ` date +" $DATE_OPTS " ` " : Exec: $1 " >> $TEMP_LOG
41
+ echo -e ` date +" $AMN_DATE_OPTS " ` " : Exec: $1 " >> $AMN_TEMP_LOG
41
42
}
42
43
43
44
run_cmd () {
@@ -48,38 +49,60 @@ run_cmd() {
48
49
$cmd $2
49
50
}
50
51
52
+ usage () {
53
+ echo " ${0} - Auto Mount or Unmount NFS shares"
54
+ echo
55
+ echo " Usage: ${0} [options] (mount|unmount)"
56
+ echo
57
+ echo " Options:"
58
+ echo
59
+ echo " -h: Show help information."
60
+ echo
61
+ echo " Commands:"
62
+ echo
63
+ echo " mount Mount fstab nfs mounts"
64
+ echo " unmount Unmount all fstab nfs mounts"
65
+ }
66
+
67
+ if [[ $# -lt 1 ]]; then
68
+ usage;
69
+ exit 0;
70
+ fi
71
+
51
72
log " AutoMountNFS started: $0 ::$$ "
52
73
74
+ ARGS=(" $@ " )
75
+ for (( a = 0 ; a < $# ; a++ )) ; do
76
+ if [[ ${ARGS[$a]} == " check" ]]; then
77
+ log " Found check command argument"
78
+ AMN_CHECK=1
79
+ elif [[ ${ARGS[$a]} == " unmount" ]]; then
80
+ log " Found unmount command argument"
81
+ AMN_UNMOUNT=1
82
+ elif [[ ${ARGS[$a]} == " -h" ]]; then
83
+ usage;
84
+ exit 0;
85
+ fi
86
+ done
87
+
53
88
MOUNT_POINTS=$( sed -e ' /^.*#/d' -e ' /^.*:\//!d' -e ' s/\t/ /g' /etc/fstab \
54
89
| tr -s " " | cut -f2 -d" " )
55
90
56
- ping -c 1 " ${SERVER_FQDN} " >> $TEMP_LOG
57
-
58
- if [ $? -ne 0 ]; then
59
- log " The server could not be reached."
91
+ unmount_all () {
60
92
for umntpnt in ${MOUNT_POINTS} ; do
61
93
log " Unmounting $umntpnt "
62
94
cmd=" umount -l -f $umntpnt "
63
95
logc " $cmd "
64
- $cmd 2>&1 >> $TEMP_LOG
96
+ $cmd 2>&1 >> $AMN_TEMP_LOG
65
97
if [ $? -ne 0 ]; then
66
98
loge " umounting failed! ($? )"
67
99
continue
68
100
fi
69
101
log " umounted $umntpnt "
70
102
done
71
- else
72
- log " Asking the server for mountpoints"
73
- cmd=" showmount -e $SERVER_FQDN "
74
- logc " $cmd "
75
- NFS_SHARES=` $cmd 2>> $TEMP_LOG | sed -e ' /^\//!d' | cut -f1 -d" " ; \
76
- test ${PIPESTATUS[0]} -eq 0`
77
- smount_ret=$?
78
- if [ $smount_ret -ne 0 ]; then
79
- loge " No shares available from host! ($smount_ret )"
80
- exit ;
81
- fi
82
- log " Server mount points:\n$NFS_SHARES "
103
+ }
104
+
105
+ mount_all () {
83
106
for mount_point in ${MOUNT_POINTS} ; do
84
107
log " Processing point: $mount_point "
85
108
if [[ $NFS_SHARES != * $mount_point * ]]; then
@@ -88,18 +111,42 @@ else
88
111
fi
89
112
cmd=" mountpoint -q $mount_point "
90
113
logc " $cmd "
91
- $cmd 2>&1 >> $TEMP_LOG
92
-
114
+ $cmd 2>&1 >> $AMN_TEMP_LOG
93
115
if [ $? -ne 0 ]; then
94
116
log " Mounting $mount_point "
95
- mount -v $mount_point >> $TEMP_LOG
117
+ mount -v $mount_point >> $AMN_TEMP_LOG
96
118
if [ $? -ne 0 ]; then
97
119
loge " Mounting failed! ($? )"
98
120
continue
99
121
fi
100
122
log " mounted $mount_point "
101
123
fi
102
124
done
125
+ }
126
+
127
+ if [[ " ${AMN_CHECK} " -eq 1 ]]; then
128
+ ping -c 1 " ${AMN_SERVER_FQDN} " >> $AMN_TEMP_LOG
129
+ if [ $? -ne 0 ]; then
130
+ log " The server could not be reached."
131
+ unmount_all
132
+ else
133
+ log " Asking the server for mountpoints"
134
+ cmd=" showmount -e $AMN_SERVER_FQDN "
135
+ logc " $cmd "
136
+ NFS_SHARES=` $cmd 2>> $AMN_TEMP_LOG | sed -e ' /^\//!d' | cut -f1 -d" " ; \
137
+ test ${PIPESTATUS[0]} -eq 0`
138
+ smount_ret=$?
139
+ if [ $smount_ret -ne 0 ]; then
140
+ loge " No shares available from host! ($smount_ret )"
141
+ exit ;
142
+ fi
143
+ log " Server mount points:\n$NFS_SHARES "
144
+ mount_all
145
+ fi
146
+ fi
147
+
148
+ if [[ " ${AMN_UNMOUNT} " -eq 1 ]]; then
149
+ unmount_all
103
150
fi
104
151
105
152
# vim: ft=sh
0 commit comments