假设我有一个 KSH 脚本my_script.ksh
,它执行复杂的操作,包括但不限于调用 SQLPLUS 来操作 Oracle 数据库中的大量(数百万)记录。该脚本接受一些参数,这些参数决定它将处理哪些记录集,并假设操作每组记录需要数小时。
我现在正在使用 NOHUP 和 & 命令选项在 Unix 服务器上运行该脚本的实例,也就是说,它当前在后台运行,并且与我用来调用该脚本的 telnet 会话分离。
假设我已经在我的台式电脑上本地修改了脚本,以便使脚本的后续执行速度更快,并添加一些审计机制,并且我即将将脚本上传到服务器上。
我上传修改后的脚本版本是否会影响当前正在运行脚本的进程?我不想终止进程并在当前记录集上重新开始,而且我害怕尝试并出错,因为我不确定这会造成多大的破坏。有经验的管理员/用户有什么建议吗?
答案1
如果在脚本文件读取时修改它,任何 shell 都会感到困惑。如果 shell 在开始执行脚本文件之前读取整个脚本文件,那么有问题的时间窗口可能非常小。我不知道 ksh 是否这样做。
如果您确保创建一个新文件而不是修改现有文件,即ln myscript myscript.running; mv -f myscript.new myscript
(或将新脚本移动到位而不是修改现有文件的任何其他方法),则不应该有任何问题。
答案2
任何 ksh 脚本都会获得自己的 shell,所有函数都会先加载,然后解释脚本。在运行时。执行期间对磁盘所做的任何更改都不会反映在当前正在运行的作业中。
答案3
效果不会很好。如果你在脚本运行时修改了它,很可能会出现语法错误。
我在使用 bash 和 dash 时遇到过这种情况。我认为它与 ksh 没什么不同。甚至 MS 批处理也失败了。