最近在给mongodb加个log rotate的脚本,偶然发现下面这行命令在sh脚本里面执行报错
代码语言:txt复制脚本里面有一行给mongod发信号的命令,具体如下
kill -SIGUSR1 $(pidof mongod)
如果执行 sh xxx.sh
会报错提示如下:
mongo_log_backup_v1.sh: line 9: kill: SIGUSR1: invalid signal specification
但是如果使用 bash xxx.sh 则不会报错,能正常执行。
下面是网上找的相关解释和说明:
代码语言:txt复制一般linux系统支持的shell有多种
如果是用bash写的shell脚本,那么,执行的时候要在bash下。如果要在其他的shell下执行,那么一定注意脚本代码的可移植性。
标题中的问题就是移植性导致。
在bash中,查看 kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN 1
36) SIGRTMIN 2 37) SIGRTMIN 3 38) SIGRTMIN 4 39) SIGRTMIN 5
40) SIGRTMIN 6 41) SIGRTMIN 7 42) SIGRTMIN 8 43) SIGRTMIN 9
44) SIGRTMIN 10 45) SIGRTMIN 11 46) SIGRTMIN 12 47) SIGRTMIN 13
48) SIGRTMIN 14 49) SIGRTMIN 15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX
在sh中 查看kill -l (无SIGUSR1)
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS RTMIN RTMIN 1 RTMIN 2 RTMIN 3 RTMIN 4 RTMIN 5 RTMIN 6 RTMIN 7 RTMIN 8 RTMIN 9 RTMIN 10 RTMIN 11 RTMIN 12 RTMIN 13 RTMIN 14 RTMIN 15 RTMAX-14 RTMAX-13 RTMAX-12 RTMAX-11 RTMAX-10 RTMAX-9 RTMAX-8 RTMAX-7 RTMAX-6 RTMAX-5 RTMAX-4 RTMAX-3 RTMAX-2 RTMAX-1 RTMAX
因此,如果在sh下执行 kill -n SIGUSR1 2222
就会得到标题上的错误。
所以在sh下应当用:kill -n USR1 2222 或者 kill -USR1 2222