admin 管理员组

文章数量: 1087135


2024年12月25日发(作者:sqlserver2000安装失败)

实现linux在关机或重启的时候执行某个任务。

现在把实现过程描述如下:

先写一个脚本放在/etc/rc.d/init.d下,chmod -f 777 , 再ln -s 到 /etc/rc.d/rc0.d/K01脚本

名 与 /etc/rc.d/rc6.d/K01脚本名,同时也要 ln -s 到 /etc/rc.d/rc3.d/S99脚本名 与

/etc/rc.d/rc5.d/S99脚本名。

K开头的代表系统关闭的时候执行,S开头的代表开机的时候执行。注意服务器脚本编写

的规范,因为有K开通的软链接并不一定会在关机的时候自动去执行,这是为什么呢?刚开

始一直没搞明白,后来从网上看到,执行K脚本的时候会查询/var/lock/subsys/下是否有与K

开头脚本同名的空文件名,如果没有就不去执行,所以要按照服务器脚本编写的规范,启动

的时候要在/var/lock/subsys/先touch一个与K01后面同名的空文件.同时也要调用

/etc/rc.d/init.d/functions能够接受star与stop命令信号,具体可以参考/etc/rc.d/rc文件,本

人是在/etc/rc.d/rc0.d/K01yum基础上改写实现的

/etc/rc0.d 包含关机脚本K*

/etc/rc6.d 包含重启脚本K*

Linux关机过程:

init同样也用来控制系统关机或者重新启动,通过shutdown命令可以实现关机操

作。要立即关闭计算机,可以使用shutdown -h now命令,h代表的意思就是halt,也

是切断了电源,如果是重新启动,直接把h参数换成r就可以了:shutdown -r now

关机过程需要一些时间,这个过程中不应该手工切断电源或者按下reset键。上面的

例子里now参数表示的就是立即的意思,也有许多其他的参数可以选用,比如+n设定倒

计时时间,n就是你想要的时间,这些都可以通过man shutdown了解一下。

举例说明,要使系统10分钟后重新起动:shutdown -r +10

在linux系统里,shutdown命令会通知已经登录进来的用户它即将关机,不过意义不

大罢了。如果定义了倒计时关机,shutdown命令会生成一个/etc/nologin文件,这个文

件的存在能够阻止其他用户再进行登录操作,当然了,root用户除外。

在系统关机时,shutdown命令会告诉init程序转换到0运行级别,如果是重新启动则

转换到第6运行级别。当进入0或者6运行级别后,系统将会依照下面的顺序运行:

1,init关闭所有它能关闭的进程(转换到其他运行级别也一样)

2,rc0.d/rc6.d目录下的第一个命令开始运行,锁定系统文件为关机作准备

3,rc0.d/rc6.d目录下的第二个命令运行,卸载除根文件系统以外的所有文件系统(

如挂载的windows分区)

4,rc0.d/rc6.d中的命令将把根文件系统重新挂载为只读属性

5,rc0.d/rc6.d中的命令调用sync程序把缓存中的数据写入文件系统

6,最后的命令是重新启动或者关闭内核程序

============================================

现在把实现过程描述如下:

先写一个脚本放在/etc/rc.d/init.d下,chmod -f 777 , 再ln -s 到 /etc/rc.d/rc0.d/K01脚

本名 与 /etc/rc.d/rc6.d/K01脚本名,同时也要 ln -s 到 /etc/rc.d/rc3.d/S99脚本名 与

/etc/rc.d/rc5.d/S99脚本名。

K开头的代表系统关闭的时候执行,S开头的代表开机的时候执行。注意服务器脚本编

写的规范,因为有K开通的软链接并不一定会在关机的时候自动去执行,这是为什么呢?刚

开始一直没搞明白,后来从网上看到,执行K脚本的时候会查询/var/lock/subsys/下是否有

与K开头脚本同名的空文件名,如果没有就不去执行,所以要按照服务器脚本编写的规范,

启动的时候要在/var/lock/subsys/先touch一个与K01后面同名的空文件.同时也要调用

/etc/rc.d/init.d/functions能够接受star与stop命令信号,具体可以参考/etc/rc.d/rc文件,本

人是在/etc/rc.d/rc0.d/K01yum基础上改写实现的。

============================================

============================================

shell如何在完成某项任务后执行某个动作?如传输文件完成后关机。

添加评论

分享

默认排序按时间排序

5 个回答

2赞同反对,不会显示你的姓名

王滨 Python,

2 人赞同

直接在脚本里加上halt就好了

比如

#!/bin/bash

wget whatever/

do_whatever

halt

当然halt要在root下执行才会有效果

发布于 2012-10-22 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

0赞同反对,不会显示你的姓名

Belleve编程、JavaScript话题优秀回答者 炼金术士

补一个 Powershell 的

do-something; stop-computer

发布于 2014-01-18 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

2赞同反对,不会显示你的姓名

匿名用户

2 人赞同

Do something && halt

发布于 2014-01-16 1 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

1赞同反对,不会显示你的姓名

匿名用户

1 人赞同

shell就是把一组命令放在一个文件中按照特定模式执行,里面可出现循环变量替换,函数,

case,逐条堆积,思路清晰先什么后什么,执行即可!

#!/bin/sh

echo “…………”

echo “…………”

echo “…………”

if [ $? -eq 0 ];then

do

echo “…………”

init 0

done

…………………………………邪恶的分割线………………

补充如下:上面是以前写的现在是这么写.人是要进步的.

#!/bin/bash

#

if /bin/cp test1 test2 >/dev/null 2>&1;then

init 0

if

编辑于 2015-11-19 3 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

0赞同反对,不会显示你的姓名

知乎用户 年轻人最重要的品质是不撸

#!/bin/bash

cp filelime

if [ $? -eq 0 ];then #如果上面一个命令执行成功,则执行下面这个。

shutdown -p now

fi

============================================

Linux下如何在特定时间执行特定任务

1 仅执行一次的任务

2 循环执行的任务

3 可唤醒停机期间的工作任务

1 仅执行一次的任务

所需程序

atd服务

at命令

启动atd

# service atd restart

atd stop/waiting

atd start/running, process 11031

千万注意要在root下执行,不然会提示Rejected send message.

at的使用

使用at的权限(因为安全性考虑最好设置)

在/etc/中设置可以使用at的账号

在/etc/中设置不可以使用at的账号

示例

1分钟后执行mkdir

$ at now + 1 minutes

warning: commands will be executed using /bin/sh

at> mkdir helloAt

at>

job 1 at Wed Feb 6 14:36:00 2013

查看工作

# at -c 2

#!/bin/sh

# atrun uid=0 gid=0

# ...

$ mkdir helloAt

特定时间关机

$ at 14:00 2013-2-9

warning: commands will be executed using /bin/sh

at> /bin/sync

at> /bin/sync

at> /sbin/shutdown -h now

at>

job 4 at Sat Feb 9 14:00:00 2013

at如何执行

输入输出:标准输入输出会重定向到mailbox里,所以执行echo "hello"在终端下是看不到的

后台工作:系统会将at工作独立于shell,交给atd程序接管,即使关了shell也没关系

查询与删除at中的工作

查询:atq

删除:atrm jobid

batch:和at相似,只是在cpu负载低时才执行

2 循环执行的任务

所需程序

crontab

权限限制

/etc/

/etc/

示例

$ crontab -e #添加任务

进入编辑环境,使用vim编辑

格式:# m h dom mon dow command

m:minute, h:hour, dom:day of month

mon:month, dow:day of week

任务示例:0 5 * * 1 tar -zcf var/backups/ /home

*表示任何时间

$ crontab -l #查询任务

$ crontab -r #删除任务

3 可唤醒停机期间的工作任务

anacron:crontab任务因为关机没有执行,anacron可以在开机时检测没有执行的crontab任

务,都执行一遍

============================================

Linux启动/关机时执行脚本 2011-06-13 17:48:35

分类: LINUX

在.login中执行相应命令,或在.bashrc(用tcsh shell,在.tcshrc)里写命令。是不行的,.login

是在用户登录时执行,用户可能在本地无需登录,或者在远程多个用户登录,多次登录;

而.tcshrc是在shell启动时执行,登录后用户一般会多次打开shell,这样该命令或程序就会

被多次执行。

Linux 启动顺序:

1、 BIOS自检

2、 运行系统内核并检测硬件

3、 运行系统的第一个进程init

4、 init读取系统引导配置文件/etc/inittab中的信息进行初始化

/etc/rc.d/t------系统初始化脚本

/etc/rc.d/rcX.d/[KS]*------根据运行级别配置服务

/etc/rc.d/---------执行本地特殊配置

其它---------不同运行级别的特殊服务

Linux启动运行init程序来启动相关程序初始化,与启动相关的一个概念是运行级,运行级

是操作系统当前运行的级别,在不同运行级别上可以定义属于该运行级的启动程序,系统的

运行级别可以在/etc/inittab文件指定,与运行级相关运行程序通过从源/etc/rc.d/init.d下链

接到目的/etc/rcX.d,这里X为系统的默认运行级别,因此,默认的启动脚本放在/etc/rc.d/init.d

下。

事例,任务在启动时运行mm:

方法:

1. 建立自启动脚本/etc/rc.d/init.d/mm,内容为:

#!/bin/bash

/usr/local/bin/* (注:此内容替换为你想执行的命令)

设置文件的属性为可执行:

#chmod +x /etc/rc.d/init.d/mm

2. 查看计算机运行级别,在文件/etc/inittab里看到id:3:initdefault:,则此系统运行级别为3。

3. 到/etc/rc3.d目录下,把你要执行的可执行文件做一个软连接,而且在命名的时候要以大

写S字母开头,S之后的数字大小代表执行顺序的先后,数字越大越靠后执行。

#ln -s /etc/rc.d/init.d/mm /etc/rc3.d/S100mm

#ln -s /etc/rc.d/init.d/mm /etc/rc0.d/K20mm

关机执行脚本:

1. vi /etc/init.d/mm

#!/bin/bash

ls >/dev/null 2>&1 (此处把ls替换为你自己的内容)

注意:此处的顺序不能更改,否则达不到想要的效果。此时先将标准输出重定向到

/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因

此标准错误也会重定向到/dev/null。

2. chmod +x /etc/init.d/mm

3. ln -s /etc/init.d/mm /etc/rc6.d/K01mm /var/lock/subsys/

4. 当你在关机时一切在悄无声息的进行着。

注:(1)本人在实验时,做关机运行脚本不成功解决方法。是在 /var/lock/subsys/中建立相同

的文件mm,或拷贝或者直接软链接过来 ln -s /etc/init.d/mm /var/lock/subsys/ 。

(2)若在字符界面下只设置开机启动,只在rc3.d目录下链接S100filename便可。

如:ln -s /etc/init.d/filename /etc/rc3.d/S100filename

============================================

1. 在/etc/rc.d/init.d/下创建脚本,要遵守service script的标准;

例如:

vi /etc/rc.d/init.d/gfs

#!/bin/bash

#

case "$1" in

restart)

echo "umount /data"

umount /data

echo "mount /data"

touch /var/lock/subsys/gfs

mount -t gfs2 /dev/gfsvg/gfs /data

;;

start)

echo "mount /data"

touch /var/lock/subsys/gfs

mount -t gfs2 /dev/gfsvg/gfs /data

;;

stop)

echo "umount /data"

umount /data

;;

*)

echo "Usage: $0 {restart|start|stop}"

exit 1

esac

exit 1

2. 修改执行脚本权限

chown -R root /etc/rc.d/init.d/gfs

chmod 700 /etc/rc.d/init.d/gfs

3. 创建开机启动的符号连接(S 是start的简写、代表启动、K是kill的简写、代表关闭。数

字代表启动的顺序)

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc0.d/S60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc1.d/S60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc2.d/S60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc3.d/S60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc4.d/S60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc5.d/S60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc6.d/S60gfs

4. 创建关机执行

1) 在/var/lock/subsys空文件

touch /var/lock/subsys/gfs

2) 创建关机符号连接

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc0.d/K60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc1.d/K60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc2.d/K60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc3.d/K60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc4.d/K60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc5.d/K60gfs

ln -s /etc/rc.d/init.d/gfs /etc/rc.d/rc6.d/K60gfs

============================================

linux下常用的关机命令有:shutdown、halt、poweroff、init;重启命令有:reboot。下面本

文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。

首先来看一下linux下比较常用的一些关机命令

关机命令:

1、halt 立刻关机 2、poweroff 立刻关机 3、shutdown -h now 立刻关机(root用户使用) 4、

shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用

shutdown -c命令取消重启

重启命令:

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的这些具体的关机命令之间的区别和各自的用法

wn 安全的关机命令

对于shutdown命令,它是大家都推荐的一个安全的命令,通过参数-h或-r的配合来完成关

机或重启。不过在linux系统中只有拥有root权限才可以使用这个命令。所以,虽然大家都

推荐用这个命令,但是这个命令用起来真的不太方便:想要用这个命令吗?先去获得root

权限吧。shutdown执行关机,是送信号给init,要求它改变运行级别,以此来关机。关机或

重启实际上是运行级别的调整,所以我们也可以用init直接调整运行级别来进行关机或重

启。使用这个命令时,机器立即关机或重启。它也需要root权限。

那么为什么说shutdown命令是安全地将系统关机呢?

实际中有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与

windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失使系统处

于不稳定的状态。甚至在有的系统中会损坏硬件设备。而在系统关机前使用shutdown命令,

系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结,即新的用户不

能再登录。直接关机或者延迟一定的时间才关机都是可能的,还有可能是重启。这是由所有

进程〔process〕都会收到系统所送达的信号〔signal〕决定的。

shutdown执行它的工作是送信号〔signal〕给init程序,要求它改变 runlevel。runlevel 0 被

用来停机〔halt〕,runlevel 6 是用来重新激活〔reboot〕系统,而 runlevel 1则是被用来让

系统进入管理工作可以进行的状态,这是预设的。假定没有-h也没有-r参数给shutdown。

要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作?你可以在这个文件

/etc/inittab里看到这些runlevels相关的资料。

shutdown 参数说明:

[-t] 在改变到其它runlevel之前,告诉init多久以后关机。 [-r] 重启计算器。 [-k] 并不真正

关机,只是送警告信号给每位登录者〔login〕。 [-h] 关机后关闭电源〔halt〕。 [-n] 不用

init而是自己来关机。不鼓励使用这个选项,而且该选项所产生的后果往往不总是你所预期

得到的。 [-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有

时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。 [-f] 在重

启计算器〔reboot〕时忽略fsck。 [-F] 在重启计算器〔reboot〕时强迫fsck。 [-time] 设定

关机〔shutdown〕前的时间。 最简单的关机命令

用halt命令来关机时,实际调用的是shutdown -h。halt 执行时将杀死应用进程,执行sync

系统调用文件系统写操作完成后就会停止内核。

halt 参数说明:

[-n] 防止sync系统调用,它用在用fsck修补根分区之后,以阻止内核用老版本的超级块

〔superblock〕覆盖修补过的超级块。 [-w] 并不是真正的重启或关机,只是写wtmp

〔/var/log/wtmp〕纪录。 [-d] 不写wtmp纪录〔已包含在选项[-n]中〕。 [-f] 没有调用shutdown

而强制关机或重启。 [-i] 关机〔或重启〕前关掉所有的网络接口。 [-p] 该选项为缺省选项。

就是关机时调用poweroff。

ff 常用的关机命令

对于poweroff,网上说它是halt命令的链接,基本用法和 halt 差不多,这里就不多说了。

init是所有进程的祖先,他是Linux系统操作中不可缺少的程序之一。它的进程号始终为1,

所以发送TERM信号给init会终止所有的用户进程,守护进程等。shutdown 就是使用这种

机制。init定义了8个运行级别(runlevel),init 0为关机,init 1为重启。

重启命令

reboot的工作过程差不多跟halt一样。不过它是引发主机重启,而halt是关机。它的参数

与halt相差不多。

============================================

============================================

============================================

============================================

============================================

============================================


本文标签: 关机 执行 命令 运行 系统