如何在本地的批处理中执行拷贝到linux服务器上的shell脚本
1一个最简单的脚本书写方法为:
新建一个文件,名字为clean(自己定义的名字),在里面编写
rm -fv o;ls -al;
(可以写一些shell普通命令,命令用分号隔开)
2执行方法
(1)在控制台输入:
sh clean
(2)先给与脚本可执行权限:
chmod 777 clean
然后直接执行:
/clean
查看cpu cat /proc/cpuinfo
查看内存top、free -m
清理内存 echo 1 > /proc/sys/vm/drop_caches
查看磁盘使用情况df-h
看你需求巡检哪些东西了,每台机器上面应用是否需要巡检 查看启停情况 日志等等
1、相关基础知识点
1)redhat的启动方式和执行次序是:
加载内核
执行init程序
/etc/rcd/rcsysinit # 由init执行的第一个脚本
/etc/rcd/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式
/etc/rcd/rclocal #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)
/sbin/mingetty # 等待用户登录
在Redhat中,/etc/rcd/rcsysinit主要做在各个运行模式中相同的初始化工作,包括:
调入keymap以及系统字体
启动swapping
设置主机名
设置NIS域名
检查(fsck)并mount文件系统
打开quota
装载声卡模块
设置系统时钟
等等。
/etc/rcd/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx从小到大来执行。(其中xx是数字、表示的是启动顺序)例如,假设缺省的运行模式是3,/etc/rcd/rc就会按上述方式调用 /etc/rcd/rc3d/下的脚本。
值得一提的是,Redhat中的运行模式2、3、5都把/etc/rcd/rclocal做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。
init在等待/etc/rcd/rc执行完毕之后(因为在/etc/inittab中/etc/rcd/rc的
action是wait),将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。
至此,LINUX的启动结束。
2、init运行级别及指令
一、什么是INIT:
init是Linux系统操作中不可缺少的程序之一。
所谓的init进程,它是一个由内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
二、运行级别
那么,到底什么是运行级呢?
简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
不同的运行级定义如下
# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式 # s init s = init 1
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 多用户图形模式(xwindow)
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rcd 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rcd/initd中的。这些脚本被用ln 命令连接到 /etc/rcd/rcnd 目录。(这里的n 就是运行级0-6)
3):chkconfig 命令(redhat 操作系统下)
不像DOS 或者 Windows,Linux 可以有多种运行级。常见的就是多用户的2,3,4,5 ,很多人知道 5 是运行 X-Windows 的级别,而 0 就
是关机了。运行级的改变可以通过 init 命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用 init 1 来切换。在 Linux 的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6]d下的K 和 S 开头的文件,按后面的数字顺序,执行这
些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux 提供了chkconfig 命令用来更新和查询不同运行级上的系统服务。
语法为:
chkconfig --list [name]
chkconfig --add name
chkconfig --del name
chkconfig [--level levels] name
chkconfig [--level levels] name
chkconfig 有五项功能:添加服务,删除服务,列表服务,改变启动信息以及检查特定服务的启动状态。
chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回 true,否则返回false。 --level 选项可以指定要查看的运行级而不一定是当前运行级。
如果在服务名后面指定了on,off 或者 reset,那么 chkconfig 会改变指定服务的启动信息。on 和 off 分别指服务在改变运行级时的启动和停止。reset 指初始化服务信息,无论有问题的初始化脚本指定了什么。
对于 on 和 off 开关,系统默认只对运行级 3,4, 5有效,但是 reset 可以对所有运行级有效。指定 --level 选项时,可以选择特定的运行级。
需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init 不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
选项介绍:
--level levels
指定运行级,由数字 0 到 7 构成的字符串,如:
--level 35 表示指定运行级3 和5。
要在运行级别3、4、5中停运 nfs 服务,使用下面的命令:chkconfig --level 345 nfs off
--add name
这个选项增加一项新的服务,chkconfig 确保每个运行级有一项启动(S) 或者 杀死(K) 入口。如有缺少,则会从缺省的init 脚本自动
建立。
--del name
用来删除服务,并把相关符号连接从 /etc/rc[0-6]d 删除。
--list name
列表,如果指定了name 那么只是显示指定的服务名,否则,列出全部服务在不同运行级的状态。
运行级文件
每个被chkconfig 管理的服务需要在对应的initd 下的脚本加上两行或者更多行的注释。
第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。
第二行对服务进行描述,可以用 跨行注释。
例如,randominit 包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for
# higher quality random number generation
表明 random 脚本应该在运行级 2, 3, 4, 5 启动,启动优先权为20,停止优先权为 80。
好了,介绍就到这里了,去看看自己目录下的/etc/rcd/initd 下的脚本吧。
设置自启动服务:chkconfig --level 345 nfs on
2 实例介绍:
1、在linux下安装了apache 服务(通过下载二进制文件经济编译安装、而非rpm包)、apache 服务启动命令: /server/apache/bin/apachectl start 。让apache服务运行在运行级别3下面。
命令如下:
1)touch /etc/rcd/initd/apache
vi /etc/rcd/initd/apache
chown -R root /etc/rcd/initd/apache
chmod 700 /etc/rcd/initd/apache
ln -s /etc/rcd/initd/apache /etc/rcd/rc3d/S60apache #S 是start的简写、代表启动、K是kill的简写、代表关闭。60数字
代表启动的顺序。(对于iptv系统而言、许多服务都是建立在数据库启动的前提下才能够正常启动的、可以通过该数字就行调整脚本的启动顺序))
apache的内容:
#!/bin/bash
#Start httpd service
/server/apache/bin/apachectl start
至此 apache服务就可以在运行级别3下 随机自动启动了。(可以结合chkconfig 对启动服务进行相应的调整)。
由于相关变量定义不同, 所以以下启动顺序仅供参考
在Redhat Redflag centos fc linux系统里面脚本的启动
先后:
第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端
rcsysinit
rcd(里面的脚本)
rclocal
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的
/etc/profiled/file
/etc/profile
/etc/bashrc
/root/bashrc
/root/bash_profile
编者注:
Ntsysv命令也可以实现根据不同运行级别启动不同的服务,但是一定要注意,使用ntsysv命令,默认采用图形的方式管理服务的启动,但是在这种情况下设置的服务,只对当前的运行级别有效果!因此,建议最好还是使用 chkconfig 来进行服务的管理。
"首先脚本需要有执行权限:chmod u x filesh;执行脚本有三种方法:1 /filesh:特点:开启bash子进程来执行,也就是开启额外的进程来进行,不影响原进程的变量、配置等2 bash filesh特点:和/filesh相同
3 source filesh 或者 filesh 特点:在原bash进程中执行脚本。第三种方法主要用于在脚本中切换用户su、切换目录cd等命令。source 和 命令是相同的。你可以搜索 source
补充,如何查看脚本运行是否开启了bash子进程vim filesh写入#!/bin/bash;#echo $$命令会输出bash进程ID;echo $$;保存并赋予可执行权限chmod u x filesh;在你的shell中输入,echo $$ 屏幕输出4176;/filesh 屏幕输出3600;bash filesh 屏幕输出3984;source filesh 屏幕输出4176 和 你直接在shell中输出的一样,说明是在同一个bash进程,另外你是感兴趣的话可以看下刘遄老师写的《Linux就该这么学》作为入门的书籍,觉得不错的话采纳下哦
"
昨天在Linux做个进程守护脚本时发生了几个小问题,实属不该。先总结如下,在以后的实践中一个避免这样的问题。同时针对cron,再次深入学习实践。
1、换行符问题
脚本与运行报错“:badinterpreter:Nosuchfileordirectory”。
脚本在windows下编辑,有几条命令是直接复制过来使用的,虽然vs code可以在右下角选择行尾序列,但是在实际运行时还是提示无法识别/r,每一行都多了个^M 。
\r\n: Dos和Windows采用回车+换行(CR+LF)表示下一行,即^M$
\n: 而UNIX/Linux采用换行符(LF)表示下一行
\r: 苹果机(MAC OS系统)则采用回车符(CR)表示下一行
2、= 赋值问题
笔者在使用if条件表达式时,知道条件要放在方括号之间,并且要有空格。误以为变量赋值=也要空格,运行时发现变量无法识=识别,后来才知道变量赋值=不能有空格。
3、cron定时任务的环境变量问题
用户的crontab定时任务不会使用默认的变量, 需要写全路径,包括crontab调用的脚本里面 。而系统cron定时任务是由定义环境变量的。MAILTO是表示例行性命令发生错误时,会将错误讯息邮件传给root,服务器中关闭postfix,导致邮件发送不成功,全部小文件堆积在/var/spool/postfix/maildrop/里面。
4、cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了/var/spool/mail目录下的那些文件,日积月累可能撑破磁盘。在cron中命令后面加上 >/dev/null 2>&1 来不输出。
5、crontab中的指令需要root,配置/etc/sudoers文件来保证sudo可用,其实可用使用系统任务计划,指定root来执行即可。
最后,笔者专注于使用cron,现在在以前的文章(树莓派上测试)- Linux crontab定时任务详细分解 的基础上,在腾讯云服务器centos上补充以下cron的知识。
用户计划任务 :
1、crond时cron的守护进程,crond是由多个配置文件和系统范围内的文件控制的,每个用户对应一个配置文件。crond守护进程是cronie软件的一部分。用户的配置文件在/var/spool/cron/username。
2、crontab命令
crontab -e 编辑当前用户的定时计划
crontab -l 列出当前用户的定时计划
crontab -r 删除当前用户的所有定时计划
crontab filename 删除当前用户的所有定时计划,并从filename中读取作业,如果未指定任何文件,则使用stdin 。
3、格式,另外/x表示间隔x个周期。 用户计划任务没有user-name字段!
/7 9-16 jul 5 command表示7月的每周五的上午9到下午5点 间,每七分钟执行一次。
系统计划任务:
1、系统cron不是由crontab来执行的,而是在一组配置文件中定义的,配置文件多了一个字段-用户字段,指定作业在那个用户下运行。
2、系统计划任务储存在/etc/crontab、 /etc/crond/ 以及/etc/cron ,/etc/crontab的语法规则参照上面的图。 /etc/crond/时软件产生的一些更新任务,一般不在里面做操作。
3、预定义作业,crondaily、cronhourly、cronmonthly、cronweekly下面储存的是可执行脚本。
/etc/cronhourly/脚本是使用runparts命令从/etc/crond/0hourly中定义的,表示每小时的第一分钟将 /etc/cronhourly/下面的脚本全部执行。
/etc/crondaily、 /etc/cronmonthly、 /etc/cronweekly也是使用runparts命令,但是是从/etc/anacrontab中执行的。
4、/etc/anacrontab语法规则
START_HOURS_RANGE=3-22,表示Anacron jobs will start between 3am and 10pm
RANDOM_DELAY=45,The RANDOM_DELAY variable denotes the maximum number of minutes that will be added to the delay in minutes variable which is specified for each job
上图中,对于 /etc/crondaily,那么delay 会是 5 minutes + RANDOM_DELAY 。
接下来就是4个重要的参数:
period in days ,delay in minutes ,job-identifier, command
The period in days variable表示执行周期,每多少天运行一次该作业。
delay in minutes:上面提到的执行的延时,启动作业前,crond等待的时间。
job-identifier:标识作业的唯一名称,用做日志记录。是/var/spool/anacron中文件的名称,检查该作业是否已运行,/etc/anacrontab启动作业时,会更新此文件的时间戳,检查作业上次运行的时间。anacron 会分析现在的时间与时间记录文件所记载的上次执行 anacron 的时间,将两者进行比较,如果两个时间的差值超过 anacron 的指定时间差值(一般是 1 天、7 天和一个月),就说明有定时任务没有执行,这时 anacron 会介入并执行这个漏掉的定时任务,从而保证在关机时没有执行的定时任务不会被漏掉。这也是为什么/etc/cron{daily,weekly,monthly} 目录中的定时任务只会被 anacron 调用,而 /etc/cronhourly/被cron调用 。
command:执行命令可以是普通命令或者脚本。
5、cron的访问控制
/etc/cronallow、 /etc/crondeny ,以决定哪些用户可以使用调度服务。
如果只有crondeny文件,而cronallow文件不存在,则除了黑名单之外的所有用户都可以使用;
如果只有cronallow文件存在,而crondeny文件不存在时,则只有白名单用户才可以使用,,包括root。
如果两个文件都存在,则忽略cronallow文件。
如果两个文件都不存在,每个用户都可以访问。
0条评论