У меня есть ситуация, когда только 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 является ksh.
Я попытался изменить сценарий для запуска в ksh и изменить "export -f" на "typeset -xf", но функция не была найдена. Типа: ksh: функция экспорта не найдена
В конце концов я сдался и просто вызвал сценарий (который был непосредственно в функции), и это сработало. Это было как:
su - ops -c "/usr/bin/processcontrol.sh start"
(Это все, конечно, упрощение настоящего сценария).
Учитывая, что у пользователя ops оболочка по умолчанию - ksh, и я не могу изменить это или изменить sudoers, есть ли способ экспортировать функцию, чтобы я мог использовать su как ops (и мне нужно запустить профиль ops) и выполнить эту функцию?
Я убедился, что у пользователя ops есть разрешение на каталог сценария, который я хотел выполнить, и разрешение на запуск этого сценария.
Любое образование по этому поводу будет оценено!
export -f restart(а неexport -f restartprocess) - это опечатка в вашем сообщении, а не в вашем реальном коде? Если да, пожалуйста, исправьте свой вопрос выше. Также может помочь включение точного текста сообщения «функция не найдена». Удачи. - person shellter   schedule 10.09.2012