centos 关机和重启命令

本文介绍了Linux系统中常见的关机和重启命令,如shutdown、halt、reboot及init等,详细解释了这些命令的工作原理及其参数含义,帮助读者更好地理解和使用Linux系统。

内容为转载,版权归原作者。

如果你很急着关机或者重启话,那么关机就是init 0,重启就是init 6或者reboot

Linux centos重启命令:

  •   1、reboot
  •   2、shutdown -r now 立刻重启(root用户使用)
  •   3、shutdown -r 10 过10分钟自动重启(root用户使用)
  •   4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)

  如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启

 Linux centos关机命令:

  •   1、halt 立刻关机
  •   2、poweroff 立刻关机
  •   3、shutdown -h now 立刻关机(root用户使用)
  •   4、shutdown -h 10 10分钟后自动关机

  如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启

Linux中常用的关机和重新启动命令有shutdown、halt、reboot以及init,它们都可以达到关机和重新启动的目的,但是每个命令的内部工作过程是不同的,下面将逐一进行介绍。

1. shutdown
shutdown命令用于安全关闭Linux系统。有些用户会使用直接断掉电源的方式来关闭Linux,这是十分危险的。因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至会损坏硬件设备。
执行shutdown命令时,系统会通知所有登录的用户系统将要关闭,并且login指令会被冻结,即新的用户不能再登录系统。使用shutdown命令可 以直接关闭系统,也可以延迟指定的时间再关闭系统,还可以重新启动。延迟指定的时间再关闭系统,可以让用户有时间储存当前正在处理的文件和关闭已经打开的 程序。

shutdown命令的部分参数如下:
[-t] 指定在多长时间之后关闭系统
[-r] 重启系统
[-k] 并不真正关机,只是给每个登录用户发送警告信号
[-h] 关闭系统(halt)

shutdown命令的工作实质是给init程序发送信号(signal),要求其切换系统的运行级别(Runlevel)。系统的运行级别包括:

0:关闭系统
1:单用户模式,如果没有为shutdown命令指定-h或-r参数而直接执行,则默认将切换到此运行级别
2:多用户模式(不支持NFS)
3:多用户模式(支持NFS),一般常用此种运行级别
5:多用户模式(GUI模式)
6:重新启动系统
2. halt
halt是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。

halt命令的部分参数如下:
[-f] 没有调用shutdown而强制关机或重启
[-i] 关机或重新启动之前,关掉所有的网络接口
[-p] 关机时调用poweroff,此选项为缺省选项

3.reboot
reboot的工作过程与halt类似,其作用是重新启动,而halt是关机。其参数也与halt类似。

4.init
init是所有进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动。

<think>好的,我现在需要帮助用户解决CentOS 7系统中关机重启时Oracle数据库的绝对路径配置问题。用户提到可能与dbstart的绝对路径有关,并且参考了之前的回答一些引用内容。首先,我需要回顾用户之前的问题我的回答,确保解决方案的一致性。 首先,用户之前遇到了“Executable path is not absolute”的错误,这通常是因为systemd服务文件中路径未使用绝对路径或者环境变量未正确解析。我之前建议用户修改服务文件,使用绝对路径,并确保环境变量正确加载。现在用户的问题是关于关机重启时的配置,需要确保Oracle服务在系统启动时自动运行,并且在关机时正确停止。 接下来,我需要参考用户提供的引用内容。引用[1]提到了使用service命令启动、停止重启Oracle服务,这在CentOS 7中可能已经被systemd取代,但用户可能仍然在使用旧的init脚本。引用[2][3]指出需要进入ORACLE_HOME目录执行dbstartlsnrctl命令,并且dbstart脚本中ORACLE_HOME_LISTNER的设置可能有问题。引用[4]展示了一个init.d脚本的示例,用于在启动关闭时执行Oracle相关命令,这可能是用户当前使用的配置。 用户现在的问题是如何在CentOS 7中配置关机重启时的Oracle服务,特别是dbstart的绝对路径问题。CentOS 7使用systemd作为初始化系统,因此正确的做法是创建一个systemd服务单元文件,而不是使用旧的init脚本。不过,用户可能在混合使用两种方法,或者之前配置了init脚本导致问题。 首先,我需要确认用户是否已经迁移到systemd,或者还在使用SysVinit脚本。根据引用[4],用户有一个init.d脚本,但可能没有正确配置chkconfig来启用自启动。此外,用户提到的绝对路径问题可能出现在这些脚本中,或者是在systemd服务文件中。 可能的解决方案包括: 1. 创建一个systemd服务文件,正确设置ExecStartExecStop的绝对路径,并确保环境变量如ORACLE_HOME正确加载。 2. 修改现有的init.d脚本,确保所有路径都是绝对路径,特别是dbstartdbshut脚本中的ORACLE_HOME_LISTNER设置。 3. 检查并修复环境变量配置,确保在启动时ORACLE_HOME被正确设置,避免使用相对路径。 4. 使用chkconfig或systemctl enable命令启用服务的自启动,确保Oracle服务在系统启动时自动运行。 接下来,我需要详细思考每一步的具体操作。例如,在创建systemd服务文件时,需要指定Type为forking,因为Oracle可能以后台进程方式启动。同时,需要设置UserGroup为oracle,避免使用su命令切换用户,这可能导致路径解析问题。环境变量可以通过EnvironmentFile指定,例如加载oracle用户的.bash_profile或.bashrc,其中定义了ORACLE_HOME其他必要变量。 另外,用户提到的dbstartdbshut脚本中的ORACLE_HOME_LISTNER问题,需要编辑这两个脚本,确保其中的ORACLE_HOME路径是绝对路径,而不是依赖环境变量。例如,检查脚本中是否有类似ORACLE_HOME_LISTNER=$ORACLE_HOME的行,可能需要硬编码为绝对路径,或者在脚本开头明确导出环境变量。 在配置systemd服务时,需要注意ExecStartExecStop的绝对路径,例如: ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1 ExecStop=/opt/oracle/product/19c/dbhome_1/bin/dbshut /opt/oracle/product/19c/dbhome_1 这里,dbstartdbshut需要传递ORACLE_HOME作为参数,因此路径必须正确。同时,需要确保执行权限SELinux上下文正确,避免权限问题导致服务启动失败。 用户可能还需要配置日志重定向,以便在启动或关闭时捕获输出,方便调试。在systemd服务中,可以使用StandardOutputStandardError指令来指定日志输出位置,或者通过journalctl查看日志。 最后,需要验证配置是否生效,执行systemctl daemon-reload,然后启用服务,测试启动停止,确保在系统重启时Oracle服务自动启动,并在关机时正确停止。 总结来说,解决方案应涵盖创建或修改systemd服务文件,修复脚本中的绝对路径,确保环境变量正确加载,设置正确的用户权限,并测试验证。同时,需要指导用户如何调试常见问题,如路径错误、环境变量未设置、权限问题等。</think>### 深度解决方案:CentOS 7 关机/重启时 Oracle 自启动配置(绝对路径修复) --- #### 一、问题本质分析 **需求核心**: 在 CentOS 7 系统关机重启时,Oracle 数据库服务(`dbstart`/`dbshut`)因路径配置问题无法自动启停。 **关键错误场景**: 1. `dbstart` 脚本中 `ORACLE_HOME_LISTNER` 未定义或使用相对路径 2. Systemd 服务或 init 脚本未正确声明绝对路径 3. 环境变量未在系统启动阶段加载(如 `ORACLE_HOME` 未生效) --- #### 二、分步修复方案 ##### 1. 修正 `dbstart`/`dbshut` 脚本配置(引用[3]) ```bash # 编辑脚本文件 sudo -u oracle vim $ORACLE_HOME/bin/dbstart sudo -u oracle vim $ORACLE_HOME/bin/dbshut # 查找并修复 ORACLE_HOME_LISTNER 定义 # 原始错误行(可能): ORACLE_HOME_LISTNER=$ORACLE_HOME # 修正为绝对路径: ORACLE_HOME_LISTNER=/opt/oracle/product/19c/dbhome_1 # 替换为实际路径 ``` **验证命令**: ```bash grep "ORACLE_HOME_LISTNER" $ORACLE_HOME/bin/dbstart ``` ##### 2. 创建 Systemd 服务文件(替代 init 脚本) ```ini # 创建服务文件 sudo vim /etc/systemd/system/oracle.service # 内容模板(关键参数): [Unit] Description=Oracle Database Service After=network.target [Service] Type=forking User=oracle Group=oinstall EnvironmentFile=/home/oracle/.bashrc # 加载环境变量[^1] ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1 # 绝对路径+参数 ExecStop=/opt/oracle/product/19c/dbhome_1/bin/dbshut /opt/oracle/product/19c/dbhome_1 TimeoutSec=0 Restart=on-failure [Install] WantedBy=multi-user.target ``` **配置说明**: - `EnvironmentFile` 指向 Oracle 用户的环境变量文件(需包含 `export ORACLE_HOME=...`) - `ExecStart`/`ExecStop` 使用绝对路径并传递 `ORACLE_HOME` 参数(避免依赖外部变量)[^3] ##### 3. 启用服务自启动 ```bash # 重载 systemd 配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable oracle.service # 验证服务状态 sudo systemctl status oracle ``` ##### 4. 修复环境变量加载(引用[4]) ```bash # 确保 .bashrc 或 .bash_profile 定义绝对路径 echo 'export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1' >> /home/oracle/.bashrc echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /home/oracle/.bashrc # 立即生效配置 source /home/oracle/.bashrc ``` --- #### 三、调试与验证 ##### 1. 手动测试服务启停 ```bash # 启动服务 sudo systemctl start oracle # 停止服务 sudo systemctl stop oracle # 查看日志 journalctl -u oracle.service -f ``` ##### 2. 检查监听器状态 ```bash sudo -u oracle lsnrctl status # 验证监听器是否随 dbstart 启动[^2] ``` ##### 3. 模拟重启场景 ```bash # 强制触发关机流程(测试自停止) sudo systemctl reboot # 重启后验证 Oracle 状态 ps -ef | grep pmon # 检查数据库进程 lsnrctl status # 检查监听器 ``` --- #### 四、错误场景对照表 | 现象 | 根因 | 修复动作 | |------|------|----------| | `dbstart: command not found` | `ORACLE_HOME` 未定义 | 检查 `.bashrc` 中的 `export` 语句[^1] | | `ORACLE_HOME_LISTNER is not set` | 脚本变量未硬编码 | 修改 `dbstart` 中为绝对路径[^3] | | 监听器未启动 | `lsnrctl` 未集成到服务 | 在 `ExecStart` 后添加 `lsnrctl start` | --- ### 相关问题 1. 如何通过 Systemd 限制 Oracle 服务的内存使用? 2. 为什么 `Type=forking` 对 Oracle 服务至关重要? 3. 如何配置 Systemd 服务在故障时自动重启? 4. SELinux 如何影响 Oracle 监听器的启动?[^1] [^1]: 确保环境变量文件(如 `.bashrc`)通过 `export` 暴露变量 [^2]: `lsnrctl` 需与 `dbstart` 集成以确保监听器状态同步 [^3]: 绝对路径配置可规避环境变量未加载的风险
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值