我有一种情况,只有root可以mailx,只有ops可以重新启动进程。我想制作一个自动脚本,既可以重新启动该过程,又可以发送一封有关这样做的电子邮件。
当我使用函数尝试此操作时,该函数“未找到”。
我有类似的东西:
#!/usr/bin/bash
function restartprocess {
/usr/bin/processcontrol.sh start
}
export -f restartprocess
su - ops -c "restartprocess"
mailx -s "process restarted" myemail.mydomain.com < emailmessage.txt
exit 0
它告诉我找不到该功能。经过一番排查,原来 ops 用户的默认 shell 是 ksh。
我尝试将脚本更改为在 ksh 中运行,并将“export -f”更改为“typeset -xf”,但仍然找不到该函数。喜欢:ksh:找不到导出功能
我终于放弃了,只是调用了脚本(直接在函数中)并且有效。这就像是:
su - ops -c "/usr/bin/processcontrol.sh start"
(这当然是对真实脚本的简化)。
鉴于用户 ops 的默认 shell 是 ksh 并且我无法更改或修改 sudoers,有没有办法导出一个函数,以便我可以 su 作为 ops(并且我需要运行 ops 的配置文件)并执行该函数?
我确保 ops 用户有权访问我希望它执行的脚本的目录,以及运行该脚本的权限。
任何有关这方面的教育将不胜感激!