Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在脚本的特定点重新启动后启动shell脚本_Shell_Scripting_Freebsd_Bsd - Fatal编程技术网

如何在脚本的特定点重新启动后启动shell脚本

如何在脚本的特定点重新启动后启动shell脚本,shell,scripting,freebsd,bsd,Shell,Scripting,Freebsd,Bsd,我不熟悉shell脚本。 我试图在我的工作中自动化服务器的基本安装,在本例中,是一个freebsd服务器 现在,我的问题是,是否可以执行一个shell脚本并在重新启动后在脚本被关闭中断的最后一点自动继续 freebsd-update upgrade -r 11.1-RELEASE freebsd-update install shutdown -r now freebsd-update install 当然,在我的脚本中关闭服务器会停止整个执行,但是在系统再次启动并执行上面命令中的最后一个命

我不熟悉shell脚本。 我试图在我的工作中自动化服务器的基本安装,在本例中,是一个freebsd服务器

现在,我的问题是,是否可以执行一个shell脚本并在重新启动后在脚本被关闭中断的最后一点自动继续

freebsd-update upgrade -r 11.1-RELEASE 
freebsd-update install
shutdown -r now
freebsd-update install
当然,在我的脚本中关闭服务器会停止整个执行,但是在系统再次启动并执行上面命令中的最后一个命令后,是否有机会跳转到脚本中

freebsd-update install

你可以这样写:

run_dir=/var/run/myscript # change the name as appropriate    
check_step() {
  step=$1
  step_file=$run_dir/$step.step.done
  if [ ! -f "$step_file" ]; then
    return 0
  else
    echo "Step $step skipped"
    return 1
  fi
}

step_done()  {
  touch "$run_dir/$1.step.done" && echo finished step $1
}

mkdir -p "$run_dir"
check_step upgrade  && freebsd-update upgrade -r 11.1-RELEASE && step_done upgrade
check_step install1 && freebsd-update install && step_done install1
shutdown -r now
check_step install2 && freebsd-update install && step_done install2
  • 检查步骤检查特定步骤是否已完成
  • 步骤\完成将步骤标记为完成

您可以使用
/var/run
跟踪步骤。在每个步骤之前,您可以检查步骤文件是否存在,并相应地跳过该步骤。如果步骤执行成功,请创建步骤文件。最后,您可以删除所有step文件。谢谢,这听起来不错,但我不知道如何执行。FreeBSD上的/bin/Bash未安装Bash。更新了答案以使其与POSIX兼容。