【转】sh: line 0: kill: SIGUSR1: invalid signal specification

2024-05-30 09:21:13 浏览数 (2)

最近在给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

0 人点赞