Linux下SVN(Subversion)自动启动脚本
在Red Hat Linux中自动运行程序
1.开机启动时自动运行程序
Linux加载后, 它将初始化硬件和设备驱动,然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或/etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。
2.登录时自动运行程序
用户登录时,bash首先自动执行系统管理员建立的全局登录script:/ect/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile , 但只执行最先找到的一个。因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。
3.退出登录时自动运行程序
退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。例如,在/.bash_logout中加入命令"tar -cvzf c.source.tgz *.c",则在每次退出登录时自动执行 "tar" 命令备份 *.c 文件。
4.定期自动运行程序
Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。
例如,建立文件crondFile,内容为"00 9 23 Jan * HappyBirthday",运行"crontab cronFile"命令后,每当元月23日上午9:00系统自动执行"HappyBirthday"的程序("*"表示不管当天是星期几)。
5.定时自动运行程序一次
定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令:
$ at 12:00
at>mailto Roger -s ″Have a lunch″ Ctr-D
Job 1 at 2000-11-09 12:00
2000-11-09 12:00时候自动发一标题为"Have a lunch",内容为plan.txt文件内容的邮件给Roger。
#!/bin/bash
RESTART="........" #里面写相应服务代码
START="......."
STOP=".........."
case "$1" in
restart)
$RESTART
echo "......"
;;
start)
$START
echo "......"
;;
STOP)
$STOP
echo "......"
;;
*)
echo "Usage: $0 {restart ¦ start ¦ stop}"
exit 1
esac
exit 1
脚本写完要修改一下权限 chmod u+x test.sh
首先,linux随机启动的服务程序都在/etc/init.d这个文件夹里,里面的文件全部都是脚本文件(脚本程序简单的说就是把要运行的程序写到一个文件里让系统能够按顺序执行,类似windows下的autorun.dat文件),另外在/etc这个文件夹里还有诸如名为rc1.d,rc2.d一直到rc6.d的文件夹,这些都是linux不同的runlevel,我们一般进入的X windows多用户的运行级别是第5级,也就是rc5.d,在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。需要注意的是,在每个rc(1-6).d文件夹下的文件其实都是/etc/init.d文件夹下的文件的一个软连接(类似windows中的快捷方式),也就是说,在/etc/init.d文件夹下是全部的服务程序,而每个rc(1-6).d只链接它自己启动需要的相应的服务程序!
要启动scim(某一程序),我们首先要知道scim程序在哪里,用locate命令可以找到,scim在/usr/bin/scim这里,其中usr表示是属于用户的,bin在linux里表示可以执行的程序。这样,我就可以编写一个脚本程序,把它放到/etc/init.d里,然后在rc5.d里做一个相应的软链接就可以了。
这个脚本其实很简单,就两行:
#!/bin/bash
/usr/bin/scim
第一行是声明用什么终端运行这个脚本,第二行就是要运行的命令。
还需要注意的一点是,在rc5.d里,每个链接的名字都是以S或者K开头的,S开头的表示是系统启动是要随机启动的,K开头的是不随机启动的。这样,你就可以知道,如果我要哪个服务随机启动,就把它名字第一个字母K改成S就可以了,当然,把S改成K后,这个服务就不能随机启动了。因此,我这个链接还要起名为SXXX,这样系统才能让它随机启动。
了解这些后,作法就很简单了。
1.创建执行脚本svn.sh(/root路径下),其内容很简单,如下:
#!/bin/bash
svnserve -d --listen-port 8080 -r /home/svnroot/repository
2.添加可执行权限
命令行运行
#chmod ug+x /root/svn.sh
3.添加自动运行
打开(vi或gedit) /etc/init.d/rc.d/rc.local ,在最后添加一行内容如下:
/root/svn.sh
保存退出。
4.检查
重启服务器,使用 ps -ef 看看svn进程是否启动了。
给大家分享下三种自动脚本,由易到难!
脚本一:
下面的shell脚本启动,是根据多项目使用的
listen-port 3690 -r /svnroot/rekfan.com/
svnserve -d --listen-port 3691 -r /svnroot/rekfan.cn/
svn默认启动端口是3690,这里有两个svn库,所以当出现这样的情况时,上面的服务脚本只会启动一个svn库.所以就需要使用shell脚本来实现启动两个svn库.
vi /root/svn.sh
svn.sh脚本内容:
#!/bin/bash
svnserve -d --listen-port 3690 -r /svnroot/rekfan.com/
svnserve -d --listen-port 3691 -r /svnroot/rekfan.cn/
然后添加可执行权限
chmod 700 /root/svn.sh或chmod ug+x /root/svn.sh
添加到自动运行
vi /etc/rc.local
在最后添加一行内容
/root/svn.sh
然后重启服务器,使用ps aux|grep svn来查看svn是否启动
脚本二:
svn服务自启动脚本
把脚本放在/etc/init.d/下
vi /etc/rc.d/init.d/svn
svn脚本内容:
#!/bin/bash
# chkconfig: - 85 15
# description: svn server
SVN_HOME=/svnroot/rekfan.com
if [ ! -f "/usr/bin/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
start)
echo "Starting svnserve…"
/usr/local/svn/bin/svnserve -d --listen-port 3690 -r $SVN_HOME
echo "Finished!"
;;
stop)
echo "Stoping svnserve…"
killall svnserve
echo "Finished!"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: svn { start | stop | restart } "
exit 1
esac
这里请注意,不要删除# chkconfig: - 85 15和# description: svn server,不然无法使用chkconfig加入服务,会提示service svn does not support chkconfig.
然后执行
chmod 755 /etc/init.d/svn
chkconfig --add svn
chkconfig svn on
最后查看下chkconfig --list|grep svn
脚本三:
#! /bin/sh -e
### BEGIN INIT INFO
# Provides: svnserve
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $local_fs $syslog $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/Stop svnserve
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="svnserve"
NAME=svnserve
PIDFILE=/var/run/$NAME.pid
DAEMON=/usr/bin/$NAME
#why add --pid-file parameter here? svnserve writes correct PID into PIDFILE.
#start-stop-daemon writes the PID before the process running. It may cause the PID nubmer dismatch.
#So, Please DO NOT rely on the --make-pidfile option
DAEMON_ARGS="-d -r /opt/svnproject --pid-file=$PIDFILE"
SCRIPTNAME=/etc/init.d/$NAME
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/lsb/init-functions
do_start()
{
start-stop-daemon --start --quiet --exec $DAEMON --test > /dev/null /
|| return 1
start-stop-daemon --start --quiet --background --exec $DAEMON -- /
$DAEMON_ARGS /
|| return 2
}
#For those prcesses with chilren processes. Please stop with --exec, plus command name.
#--pid-file can only kill parent process. All the children processes will be transferred to 1.
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --exec "$DAEMON"
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON"
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
if [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) >/dev/null 2>&1; then
log_daemon_msg "apparently already running"
log_end_msg 0
exit 0
fi
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
转自:http://blog.rekfan.com/articles/190.html
http://blog.chinaunix.net/uid-725717-id-2060377.html
Linux下SVN(Subversion)自动启动脚本的更多相关文章
- linux下svn(subversion)服务端添加工程及配置权限
linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...
- linux下svn 搭建
linux 下SVN搭建加自动提交更新到指定目录一.安装#yum install subversion yum安装SVN#mkdir -p /opt/svn/repos 创建s ...
- linux下svn命令使用大全
最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个linux下svn命令使用大全:1.将文件checkout到本地目录 svn checkout path(path是服务器 ...
- [转载]linux下svn命令使用大全
原文地址:http://blog.chinaunix.net/uid-22150747-id-189264.html 最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个li ...
- Linux下SVN服务器安装配置及客户端安装说明
原文地址:http://wenku.baidu.com/link?url=h3dVAMx4azpOXEND5HQEE6nliE8-zc0GSQ03yv4cUs1vXMALXF64UsK7kT7kXm_ ...
- 转载-Linux下svn搭建配置流程
Linux下svn搭建配置流程 一. 源文件编译安装.源文件共两个,为: 1. 下载subversion源文件 subversion-1.6.1.tar.gz http://d136 ...
- Linux下SVN服务器搭建配置
Linux下SVN服务器搭建配置 1.SVN服务安装 yum install subversion 2.创建SVN代码仓库 mkdir /data/svn svnadmin create /data/ ...
- linux下svn的安装与配置
---恢复内容开始--- linux下svn的安装与配置 Linux发行版本:CentOS6.5 1.安装subversion sudo yum -y install subversion 2.创建s ...
- Linux下Tomcat开机自动启动
linux下tomcat开机自动启动有两种方法,一种是简单,一种是复杂而又专业的,使用shell脚本要实现,我们一般推荐shell脚本启动方式.下面我们分别介绍这两种方法. 1.shell脚本启动 众 ...
随机推荐
- activity,view,window,windowmanager代码阅读总结及相互关系
ActivityThread类:performLaunchActivity函数: activity.attach(appContext, this, getInstrumentation(), r.t ...
- TEncoding & TNetEncoding(使用现成的TBase64Encoding,TEncoding和TMBCSEncoding)
TEncoding and TNetEncoding are abstract classes and you will never instantiate one of them, because ...
- android Service简介及启动关闭方式
(1)Service是Android系统中的四大组件之一,和Activity是同一层次的组件:它是一种生命周期较长,没有可视化界面,运行于后台的一种服务:例如,我们听音乐可以使用Service,下载东 ...
- 黑马程序员_Java_多线程
8.多线程 8.1.多线程概述 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程(例:FlashGet):就是进程中一个独立的控制单元.线 ...
- bzoj1756 Vijos1083 小白逛公园
Description 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路",路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. ...
- javascript笔记6之函数
/* function box() { //函数的声明 alert('我只有被调用才可以执行!'); //函数本身没有运行功能 } //必须调用才可以执行 box(); //调用 function b ...
- hdu 3836 Equivalent Sets(tarjan+缩点)
Problem Description To prove two sets A and B are equivalent, we can first prove A is a subset of B, ...
- C++简介
本文仅用于学习交流,转载请注明:http://www.cnblogs.com/mxbs/p/6266466.html Hello,C++ World! 简介: C++融合了3中不同的编程传统:C语言 ...
- Difference between enabled and userInteractionEnabled properties
I read through the documentation, and here are my findings. UIButton inherits from UIControl the boo ...
- openssl 非对称加密算法RSA命令详解
1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很 ...