我有一种情况,只有root可以mailx,只有操作可以重启进程。我想制作一个自动脚本,重启过程并发送一封关于这样做的电子邮件。
当我使用函数尝试此功能时,“找不到”功能。
我有类似的东西:
#!/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,有没有办法导出一个函数,以便我可以作为ops(我需要运行ops的配置文件)并执行该操作功能
我确保ops用户拥有我希望它执行的脚本目录的权限,以及运行该脚本的权限。
任何关于此的教育都将受到赞赏!
答案 0 :(得分:0)
出口功能有很多限制,尤其如此
与su - ...
结合使用不同的帐户和不同的shell。
相反,将您的脚本内部翻出并放入所有命令 这将在调用shell中的函数内运行。
类似的东西:( bash和ksh都是)
#!/usr/bin/bash
function restartprocess {
/bin/su - ops -c "/usr/bin/processcontrol.sh start"
}
if restartprocess; then
mailx -s "process restarted" \
myemail@mydomain.com < emailmessage.txt
fi
exit 0
这会隐藏/bin/su
函数中的所有restartprocess
处理,并且可以随意扩展。