《linux关机触发脚本》由会员分享,可在线阅读,更多相关《linux关机触发脚本(10页珍藏版)》请在金锄头文库上搜索。
1、实现 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 开通的软链接并不一定会在关机的时候自动去执行,这是为什么呢?刚开始一直没搞明白,后来从网上看到,
2、执行 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 同样
3、也用来控制系统关机或者重新启动,通过 shutdown 命令可以实现关机操 作。要立即关闭计算机,可以使用 shutdown -h now 命令,h 代表的意思就是 halt,也就 是切断了电源,如果是重新启动,直接把 h 参数换成 r 就可以了: shutdown -r now 关机过程需要一些时间,这个过程中不应该手工切断电源或者按下 reset 键。上面的 例子里 now 参数表示的就是立即的意思,也有许多其他的参数可以选用,比如+n 设定倒 计时时间,n 就是你想要的时间,这些都可以通过 man shutdown 了解一下。 举例说明,要使系统 10 分钟后重新起动:shutdown
4、-r +10 在 linux 系统里,shutdown 命令会通知已经登录进来的用户它即将关机,不过意义不 大罢了。如果定义了倒计时关机,shutdown 命令会生成一个/etc/nologin 文件,这个文 件的存在能够阻止其他用户再进行登录操作,当然了,root 用户除外。 在系统关机时,shutdown 命令会告诉 init 程序转换到 0 运行级别,如果是重新启动则 转换到第 6 运行级别。当进入 0 或者 6 运行级别后,系统将会依照下面的顺序运行: 1,init 关闭所有它能关闭的进程(转换到其他运行级别也一样) 2,rc0.d/rc6.d 目录下的第一个命令开始运行,锁定系统文件
5、为关机作准备 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
6、.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
7、能够接受 star 与 stop 命令信号,具体可以参考 /etc/rc.d/rc 文件,本人是在/etc/rc.d/rc0.d/K01yum 基础上改写实现的。=shell 如何在完成某项任务后执行某个动作 ?如传输文件完成后关机。添加评论分享默认排序按时间排序5 个回答2 赞同反对,不会显示你的姓名王滨 Python, http:/2人赞同直接在脚本里加上 halt 就好了比如#!/bin/bashwget http:/whatever/xxx.tar.gzdo_whateverhalt当然 halt 要在 root 下执行才会有效果发布于 2012-10-22 添加评论 感谢 分享收藏
8、没有帮助 举报 作者保留权利0 赞同反对,不会显示你的姓名Belleve 编程、JavaScript 话题优秀回答者 炼金术士补一个 Powershell 的do-something; stop-computer发布于 2014-01-18 添加评论 感谢 分享收藏 没有帮助 举报 作者保留权利2 赞同反对,不会显示你的姓名匿名用户2人赞同Do something &halt发布于 2014-01-16 1 条评论 感谢 分享收藏 没有帮助 举报 作者保留权利1 赞同反对,不会显示你的姓名匿名用户1人赞同shell 就是把一组命令放在一个文件中按照特定模式执行,里面可出现循环变量替换,函数,c
9、ase,逐条堆积,思路清晰先什么后什么,执行即可!#!/bin/shecho “”echo “”echo “”if $? -eq 0 ;thendoecho “”init 0done邪恶的分割线补充如下:上面是以前写的现在是这么写.人是要进步的.#!/bin/bash#if /bin/cp test1 test2 /dev/null 2theninit 0if编辑于 2015-11-19 3 条评论 感谢 分享收藏 没有帮助 举报 作者保留权利0 赞同反对,不会显示你的姓名知乎用户 年轻人最重要的品质是不撸#!/bin/bashcp filelimeif $? -eq 0 ;then #如果上
10、面一个命令执行成功,则执行下面这个。shutdown -p nowfi=Linux 下如何在特定时间执行特定任务1 仅执行一次的任务2 循环执行的任务3 可唤醒停机期间的工作任务1 仅执行一次的任务所需程序atd 服务at 命令启动 atd# service atd restartatd stop/waitingatd start/running, process 11031千万注意要在 root 下执行,不然会提示 Rejected send message.at 的使用使用 at 的权限( 因为安全性考虑最好设置)在/etc/at.allow 中设置可以使用 at 的账号在/etc/at.
11、deny 中设置不可以使用 at 的账号示例1 分钟后执行 mkdir$ at now + 1 minuteswarning: commands will be executed using /bin/shat mkdir helloAtat 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-9warning: commands will be executed using /bin/shat /bin/syncat
12、 /bin/syncat /sbin/shutdown -h nowat job 4 at Sat Feb 9 14:00:00 2013at 如何执行输入输出:标准输入输出会重定向到 mailbox 里,所以执行 echo hello在终端下是看不到的后台工作:系统会将 at 工作独立于 shell,交给 atd 程序接管,即使关了 shell 也没关系查询与删除 at 中的工作查询:atq删除:atrm jobidbatch:和 at 相似,只是在 cpu 负载低时才执行2 循环执行的任务所需程序crontab权限限制/etc/cron.allow/etc/cron.deny示例$ cro
13、ntab -e #添加任务进入编辑环境,使用 vim 编辑格式:# m h dom mon dow commandm:minute, h:hour, dom:day of monthmon:month, dow:day of week任务示例:0 5 * * 1 tar -zcf var/backups/home.tgz /home*表示任何时间$ crontab -l #查询任务$ crontab -r #删除任务3 可唤醒停机期间的工作任务anacron:crontab 任务因为关机没有执行,anacron 可以在开机时检测没有执行的 crontab 任务,都执行一遍=Linux 启动/关
14、机时执行脚本 2011-06-13 17:48:35分类: LINUX在.login 中执行相应命令,或在.bashrc (用 tcsh shell,在 .tcshrc)里写命令。是不行的,.login 是在用户登录时执行,用户可能在本地无需登录,或者在远程多个用户登录,多次登录;而.tcshrc 是在 shell 启动时执行,登录后用户一般会多次打开 shell,这样该命令或程序就会被多次执行。Linux 启动顺序:1、 BIOS 自检2、 运行系统内核并检测硬件3、 运行系统的第一个进程 init4、 init 读取系统引导配置文件/etc/inittab 中的信息进行初始化/etc/rc
15、.d/rc.sysinit-系统初始化脚本/etc/rc.d/rcX.d/KS*-根据运行级别配置服务/etc/rc.d/rc.local-执行本地特殊配置其它-不同运行级别的特殊服务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/* (注:此内容替换为你想执行的命令)设置文件的属性为可执