zoukankan      html  css  js  c++  java
  • linux systemctl service examples

    一、脚本服务化目的

    1、python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据。但是网上买的服务器会不定时进行维护,服务器会被重启。这样我们的爬虫服务就无法运行。这个时候我们可以把python脚本服务化,服务器重启后,脚本就会自动运行。解决服务器维护后需要手动运行python脚本。  

     2、实现方法:

    给编写好的python脚本开头加上

     #!/usr/bin/python  

    3、启动shell 脚本 编写

    vi  pystock.sh

    #vim /etc/init.d/httpd  
    #!bin/bash  
    lock="py_stock.py"  
    
    #启动服务方法  
    start(){  
            echo "service start...."  
            su root -c "python /root/python/py_stock/src/crawler/py_stock.py &"
    }  
    
    #停止服务方法 
    stop(){ echo "service stop...." pkill -f $lock}
    
    #查看服务状态  
    status(){  
            if [ -e $lock ];then  
                echo "$0 service start"  
            else  
                echo "$0 service stop"  
            fi  
    }
    
    #重新启动  
    restart(){  
            stop  
            start  
    }  
    case "$1" in  
    "start")  
            start  
            ;;  
    "stop")  
            stop  
            ;;  
    "status")  
            status  
            ;;  
    "restart")  
            restart  
            ;;  
    *)  
            echo "$0 start|stop|status|restart"  
            ;;  
    esac

    3、复制脚本到/etc/init.d/目录下:cp pystock.sh /etc/init.d/ 

    4、给shell脚本赋予执行权限 :chmod +x /etc/init.d/pystock.sh

    5、添加服务:chkconfig --add pystock.sh

    6、设置服务为开机启动:chkconfig --level 35 pystock.sh on    

    出现的问题:

    当我运行shell 脚本启动python脚本时,提示我一下错误

    syntax error near unexpected token `$'{
    ''  
    

    这是因为window 下换行是 ,linux 下换行是 。我在window下编写的shell 脚本拷贝到linux上。shell命令解读时会先解读/r,在解读后面的脚本导致报错。而且这个 在Linux上是看不到的。

    解决方法:

     sed 's/
    //' 原文件 >转换后文件

    二、参考:http://0pointer.de/public/abrtd

    #!/bin/bash
    # Starts the abrt daemon
    #
    # chkconfig: 35 82 16
    # description: Daemon to detect crashing apps
    # processname: abrtd
    ### BEGIN INIT INFO
    # Provides: abrt
    # Required-Start: $syslog $local_fs
    # Required-Stop: $syslog $local_fs
    # Default-Stop: 0 1 2 6
    # Default-Start: 3 5
    # Short-Description: start and stop abrt daemon
    # Description: Listen to and dispatch crash events
    ### END INIT INFO
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    ABRT_BIN="/usr/sbin/abrtd"
    LOCK="/var/lock/subsys/abrtd"
    OLD_LOCK="/var/lock/subsys/abrt"
    RETVAL=0
    
    #
    # Set these variables if you are behind proxy
    #
    #export http_proxy=
    #export https_proxy=
    
    #
    # See how we were called.
    #
    
    check() {
    	# Check that we're a privileged user
    	[ "`id -u`" = 0 ] || exit 4
    
    	# Check if abrt is executable
    	test -x $ABRT_BIN || exit 5
    }
    
    start() {
    
    	check
    
    	# Check if it is already running
    	if [ ! -f $LOCK ] && [ ! -f $OLD_LOCK ]; then
    		echo -n $"Starting abrt daemon: "
    		daemon $ABRT_BIN
    		RETVAL=$?
    		[ $RETVAL -eq 0 ] && touch $LOCK
    		echo
    	fi
    	return $RETVAL
    }
    
    stop() {
    
    	check
    
    	echo -n $"Stopping abrt daemon: "
    	killproc $ABRT_BIN
    	RETVAL=$?
    	[ $RETVAL -eq 0 ] && rm -f $LOCK
    	[ $RETVAL -eq 0 ] && rm -f $OLD_LOCK
    	echo
    	return $RETVAL
    }
    
    
    restart() {
    	stop
    	start
    }
    
    reload() {
    	restart
    }
    
    case "$1" in
    start)
    	start
    	;;
    stop)
    	stop
    	;;
    reload)
    	reload
    	;;
    force-reload)
    	echo "$0: Unimplemented feature."
    	RETVAL=3
    	;;
    restart)
    	restart
    	;;
    condrestart)
    	if [ -f $LOCK ]; then
    		restart
    	fi
    	# update from older version
    	if [ -f $OLD_LOCK ]; then
    		restart
    	fi
    	;;
    status)
    	status abrtd
    	RETVAL=$?
    	;;
    *)
    	echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|force-reload}"
    	RETVAL=2
    esac
    
    exit $RETVAL

     三、参考系统示例

    [root@docker-server ~]# cd /etc/init.d/
    [root@docker-server init.d]# ll
    total 32
    -rw-r--r--. 1 root root 15301 Aug 30  2016 functions
    -rwxr-xr-x. 1 root root  2989 Aug 30  2016 netconsole
    -rwxr-xr-x. 1 root root  6834 Aug 30  2016 network
    -rw-r--r--. 1 root root  1160 Oct 12  2016 README
    [root@docker-server init.d]# cvat README 
    -bash: cvat: command not found
    [root@docker-server init.d]# cat README 
    You are looking for the traditional init scripts in /etc/rc.d/init.d,
    and they are gone?
    
    Here's an explanation on what's going on:
    
    You are running a systemd-based OS where traditional init scripts have
    been replaced by native systemd services files. Service files provide
    very similar functionality to init scripts. To make use of service
    files simply invoke "systemctl", which will output a list of all
    currently running services (and other units). Use "systemctl
    list-unit-files" to get a listing of all known unit files, including
    stopped, disabled and masked ones. Use "systemctl start
    foobar.service" and "systemctl stop foobar.service" to start or stop a
    service, respectively. For further details, please refer to
    systemctl(1).
    
    Note that traditional init scripts continue to function on a systemd
    system. An init script /etc/rc.d/init.d/foobar is implicitly mapped
    into a service unit foobar.service during system initialization.
    
    Thank you!
    
    Further reading:
            man:systemctl(1)
            man:systemd(1)
            http://0pointer.de/blog/projects/systemd-for-admins-3.html
            http://www.freedesktop.org/wiki/Software/systemd/Incompatibilities

    四、利用systemctl添加自定义系统服务

    参考:https://www.cnblogs.com/saneri/p/7778756.html

  • 相关阅读:
    睿象云-智能运维平台
    leetcode-----53. 最大子序和
    leetcode-----50. Pow(x, n)
    leetcode-----49. 字母异位词分组
    leetcode-----48. 旋转图像
    leetcode-----47. 全排列 II
    leetcode-----46. 全排列
    leetcode-----44. 通配符匹配
    SpringMVC @RequestParam和@RequestBody的区别
    SpringMVC 接受页面传递参数
  • 原文地址:https://www.cnblogs.com/nulige/p/9034394.html
Copyright © 2011-2022 走看看