㈠ linux一个sh小脚本,这里的wait用的对吗为什么不是sleepwait可以这么用吗
你这种情况比较复杂!wait命令后面跟的参数是进程的id,根据我的理解,wait是等待某进程结束后再往下执行脚本,如果wait后不跟参数,就是等待以上所有进程都执行完后再往下执行脚本。
按照你的意思,是要等待一段时间的,则应该用sleep命令,sleep就是用来延迟一段时间用的,将wait300改成sleep300才正确。
㈡ linux下如何监听进程
一、supervise
Supervise是daemontools的一个工具,可以用来监控管理unix下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程序。
使用:
mkdir test
cd test
vim run 写入希望执行的操作
supervise test (注意这里是的参数是run文件上层的文件夹,改变run的为可执行 chmod +x run)
二、monit
monit是一个小型的开放源码工具来管理和监控Unix系统。Monit可以自动维护进程,及时避免进程异常退出等产生的问题。
系统: monit可以监控问题的发生,包括进程状态、系统cpu负载、内存占用情况等,例如当apache服务的cpu负载以及内存闸弄情况过高时候,它会重启apache服务。
进程: monit可以监控守护进程,包括系统进程。例如当某个进行down掉,它会自动恢复重启该进程。
文件系统:Monit可以监控本地文件、目录、文件系统的变化,包括时间戳、校验值、大小的变化。例如,可以监控文件sha1以及md5的值,来监控文件是否发生变化。
网络:monit可以监控网络连接,支持TCP、UDP、Unix domain sockets以及HTTP、SMTP等。
定时脚本:monit可以用来定时测试程序和脚本,获取程序输出结果,进而判断是否成功或其他情况。
安装:
sudo apt-get install monit
编辑配置:
sudo vim /etc/monit/monitrc
启动、停止、重启:
sudo /etc/init.d/monit start
sudo /etc/init.d/monit stop
sudo /etc/init.d/monit restart
设置页面监控状态:
set httpd port 2812 and
allow 0.0.0.0/0.0.0.0
allow localhost
增加监控:
需要注意的是,这里需要添加start和stop,缺一个都是不行的
1.根据程序名称来监控
check process test with MATCHING test.py
start program = "/home/yxd/test.py"
stop program = "xxxxx"
2.根据pid监控
check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/rcWebServer.sh start https"
stop program = "/etc/init.d/rcWebServer.sh stop https"
if changed pid then aler
参考:用monit监控系统关键进程
supervisord
Supervisor是一个C/S系统,它可以在类unix操作系统让用户来监视和控制后台服务进程的数量。它是由python编写的,常用于进程异常退出的重启保护。
安装:
pip install supervisor
查看配置文件:
echo_supervisord_conf
从该命令的结果中,可以看到各个模块的配置信息。
创建配置文件:
echo_supervisord_conf > /etc/supervisord.conf
配置应用:
[program:test]
command=python /root/test_supervisor.py
process_name=%(program_name)s
stdout_logfile=/root/test.log
stderr_logfile=/root/test.log
保存,启动:
/usr/bin/supervisord -c /etc/supervisord.conf
㈢ linux服务器上写个脚本,每隔xx分钟ping指定ip,如果不通,向指定邮箱发送邮件。
别发邮件了 直接发短信多好。。。
我以前练习的时候写的,挺烂的但是能用
#!/bin/bash
#ping 2分钟结果存入文件
#var 1.0
#LX 2009年4月6日
#help function
help()
{
cat << HELP
============= ping120s.sh help =============
ping目标地址,存入文件。 配合crontab用
USAGE:
-h 显示帮助
-to IP ping的IP地址
-sh 检查历史是否有丢包
-show 检查详细历史
-gz 压缩以前的记录,并删除txt文件
-of dir 指定输出文件的位置(要求绝对目录),也可以指定文件名(不建议)
HELP
}
#简略输出结果的函数
shmin()
{
for fName in PING__*.txt
do
var=$(sed -n '/.*packets.*/p' $fName | sed 's/.*received,//g' | sed 's/, time.*//g')
var="$(sed -n '/2009_.*/p' $fName) ==>$var"
echo "$var"
var=""
done
}
toGz()
{
gzName=ALL_$(date +%Y年%m月%d日%k时).tar.gz
gzName=`echo "$gzName" | sed 's/ /0/g'`
tar cvfz "$gzName" *.txt
[ ! -d old ] && mkdir old
[ ! -d tmp ] && mkdir tmp
mv $gzName old/ && mv *.txt tmp/
}
############## main ###############
[ -z $1 ] && { echo "参数错误"; help; exit 1; }
#fileName=ping__$1__$(date +%m月%d日%k:%M)
#删除文件名中的空格, 不删除的话0点到10点之前都没法记录 日亚终于找到毛病了
#fileName=`echo "$fileName" | sed 's/ /0/g'`
#echo $fileName
TIMEOUT=30
while [ -n "$1" ]; do
case "x$1" in
x-h) help; exit 0;;
x-to)
shift
[ -z "$1" ] && { echo "参数错误"; help; exit 1; }
pingTo="$1"
shift
;;
x-sh) shmin; exit 0;;
x-show) clear; tail -n 3 PING__*.txt; exit 0;;
x-gz) toGz; exit 0;;
x-of)
shift
[ -z "$1" ] && { echo "参数错误"; help; exit 1; }
ofilename="$1"
shift
;;
*) echo "error"; help; exit 1 ;;
esac
done
#-to是必须参数,ping到那里
[ -z "$pingTo" ] && { echo "-to 参数必选之参数"; help; exit 1; }
#判断存数文件的中间名
if [ -z "$ofilename" ] || [ -d "$ofilename" ]; then
mfileName=$pingTo
else
mfileName=${ofilename##/*/}
fi
#生成存储文件的名称,如没有sed那句过了夜里12点0点开头到9点都无法存储,应为有个空格 日!
fileName=PING__"$mfileName"__$(date +%m月%d日%k:%M)
fileName=`echo "$fileName" | sed 's/ /0/g'`
#存储的目录判断,默认是$PWD,主要是判断绝对目录开头的/和结束的/
dirName="$PWD/"
if [ "x${ofilename%${ofilename#?}}" = "x/" ]; then
if [ -d "$ofilename" ]; then
dirName="$ofilename"
[ "x${ofilename#${ofilename%?}}" = "x/" ] || dirName="$dirName/"
elif [ -d "${ofilename%/*}" ]; then
dirName="${ofilename%/*}/"
fi
fi
#echo $fileName
#echo $dirName
echo "$(date +%Y_%m_%d__%H:%M)" > "$dirName$fileName.txt"
ping "$pingTo" -n -w "$TIMEOUT" >> "$dirName$fileName.txt"
wait
bash sms.sh "$pingTo" 2>>sms.log
exit 0
下面是发短信脚本 sms.sh
lx@lx-Linux:~/bash/lx/ping$ cat sms.sh
#!/bin/bash
data=$(sh ping120s_V1.sh -sh| awk -F"[% ]" '{print $3}'|tac)
data=$(echo $data | awk '{print $1,$2}')
shijian=$(date +%Y年%m月%d日%k时%M分|sed 's/ *//g')
if [ -z $1 ]
then
address=""
else
address="$1"
fi
#echo $data
#echo $shijian
#data="40 $data"
for i in $(echo $data)
do
# echo "-->$i"
if [ $i -ge 40 ]
then
# echo "$i>=40"
sms -f 手机号码 -p 飞信密码 -t 发送给那个手机 -m "To:$address $i% loss -- $shijian" >>sms.log
wait
echo "To:$address $i% loss -- $shijian" >>sms.log
# bash ping120s_V1.sh -gz
exit 9
else
# echo "$i<40"
:
fi
done
exit 0
㈣ linux 一个sh小脚本,这里的wait用的对吗为什么不是sleepwait可以这么用吗
wait 命令后面跟的参数是进程的id,根据我的理解,wait是等待某进程结束后再往下执行脚本,如果wait后不跟参数,就是等待以上所有进程都执行完后再往下执行脚本。
按照你的意思,是要等待一段时间的,则应该用sleep 命令,sleep就是用来延迟一段时间用的,将wait 300 改成sleep 300才正确。
㈤ LINUX、UNIX系统启动不成功,要如何解决
A 内核引导
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是linux内核做了一些列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。交给了下一个主角init。
B 运行init
init
进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件
/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。具体内容如下:(你可以在你的linux上执行命令 cat
/etc/inittab 这样获得)
复制代码
代码如下:
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not havenetworking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
###表示当前缺省运行级别为5(initdefault);
id:5:initdefault:
###启动时自动执行/etc/rc.d/rc.sysinit脚本(sysinit)
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
###当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回(wait)
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
###在启动过程中允许按CTRL-ALT-DELETE重启系统
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schele a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
###在2、3、4、5级别上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,
###如果进程退出则再次运行mingetty程序(respawn)
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
###在5级别上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行(respawn)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
以上面的inittab文件为例,来说明一下inittab的格式。其中以#开始的行是注释行,除了注释行之外,每一行都有以下格式:
代码如下:
id:runlevel:action:process
对上面各项的详细解释如下:
1. id
id是指入口标识符,它是一个字符串,对于getty或mingetty等其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
2. Runlevel
runlevel是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留:其中0作为shutdown动作,1作为重启至单用户模式,6为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,都使用了2、3、4、5几个级别,在CentOS系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7-9级别也是可以使用的,传统的Unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹配成功才会执行。
3. action
action是描述其后的process的运行方式的。action可取的值包括:initdefault、sysinit、boot、bootwait等:initdefault是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入runlevel。sysinit、boot、bootwait等action将在系统启动时无条件运行,而忽略其中的runlevel。其余的action(不含initdefault)都与某个runlevel相关。各个action的定义在inittab的man手册中有详细的描述。
㈥ Linux 脚本编写 如何编写一个脚本,修改已有文件中的内容
实现的方法如下:
1、第一步,打开命令控制台以找到要编辑的文件,执行命令ls来查看下面的一些文件,在下面有一个index.php文件,如下图所示。
㈦ 使用fork,exec以及wait函数构造简单的shell解释程序。
linux下面?
linux我没有玩过,帮不上你啊。
希望楼主不要浪费悬赏的分。
㈧ 在linux shell 脚本中 , 想延时 ,后来却一直被提示 无效的时间间隔,不知何故..请教!!
你的文件是dos格式的,使用dos2unix + 文件名,转换该文件的格式
㈨ linux shell 脚本运行完毕后不能自动停止
我觉得你是这个地方出问题:
dcm2nii -g y -o ${ana_dir}/${subject} ${ana_dir}/dicom/${subject} &
这个&号,是让程序在后台运行,不会自己停止的。
你可以去掉这个&试试你的程序
㈩ LINUX配置启动级别的文件名称,路径以及个级别分别是什么
配置启动级别文件名:inittab
路径/etc/
共有7个级别:
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
0:关机(不要设置为启动默认级别)
1:单用户模式
2:多用户,无NFS(如果您没有配置网络,该级别与3一样)
3:完全多用户模式
4:不使用
5:X11图形模式
6:重启(不要设置为启动默认级别)
Linux 启动时,运行一个叫做init 的程序,然后由它来启动后面的任务,包括多用户环境,网络等。那么,到底什么是运行级别呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1 到6,具有不同的功能。这些级别在/etc/inittab 文件里指定。这个文件是init
程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。大多数的Linux 发行版本中,启动脚本放在/etc/rc.d/init.d,这些脚本被ln 命令来连接到 /etc/rc.d/rcn.d目录(这里的n 就是运行级0-6)。如:/etc/rc.d/rc5.d 下面的S10network就是连接到/etc/rc.d/init.d下的network 脚本的。因此,我们可以知道,rc5.d 下面的文件就是和运行级5 有关的。