Назад | Перейти на главную страницу

Повлияет ли загрузка измененной версии сценария KSH на процессы, на которых в данный момент выполняется сценарий?

Допустим, у меня есть сценарий KSH my_script.ksh который выполняет сложные операции, включая, помимо прочего, вызов SQLPLUS для управления большим количеством (миллионами) записей в базе данных Oracle. Сценарий принимает несколько параметров, которые определяют, какие наборы записей он будет обрабатывать, и предположим, что на обработку каждого набора записей уйдут часы.

Теперь у меня есть экземпляр сценария, запущенного на сервере Unix с использованием параметров команды NOHUP и &, то есть он в настоящее время работает в фоновом режиме и отключен от сеанса telnet, который я использовал для вызова сценария.

Предположим, я изменил сценарий локально на своем настольном ПК, чтобы ускорить последующее выполнение сценария и добавить некоторый механизм аудита, и я собираюсь загрузить сценарий на сервер.

Повлияет ли загрузка измененной версии сценария на процесс, в котором в данный момент выполняется сценарий? Я не хочу прерывать процесс и начинать все заново с текущим набором записей, и я боюсь попытаться сделать ошибку, так как не уверен, насколько это будет разрушительно. Какой-нибудь совет от опытного администратора / пользователя?

Любая оболочка запутается, если вы измените файл сценария, пока они его читают. Проблемное временное окно может быть очень маленьким, если оболочка прочитает весь файл сценария перед его выполнением. Не знаю, делает ли это ksh.

Если вы убедитесь, что создали новый файл, а не изменяете существующий файл, т. Е. ln myscript myscript.running; mv -f myscript.new myscript (или любой другой метод, который перемещает новый сценарий на место, а не изменяет существующий файл), у вас не должно возникнуть никаких проблем.

Любой сценарий ksh получит свою собственную оболочку, сначала загружаются все функции, а затем сценарий интерпретируется. Во время выполнения. Любые изменения на диске, сделанные во время выполнения, не будут отражены в текущем выполняемом задании.

Это не сработает. Если вы изменили свой скрипт во время его работы, очень вероятно, что возникнет синтаксическая ошибка.

Я испытал это с помощью bash и dash. Я не думаю, что это сильно отличается от ksh. Даже пакет MS не работает.