• 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

  • 相关阅读:
    ButterKnife 原理解析
    有关java之反射的使用
    Integer 与 int 中的 ==
    下拉框、多选框、单选框 通过TagHelper绑定数据
    动态构建视图表单
    添加我的应用中的后台图标
    标准服务接口示例代码
    .net Core下的 常用方法
    使用Redirect跳转
    标准表单提交示例代码
  • 原文地址:https://www.cnblogs.com/nulige/p/9034394.html
Copyright © 2020-2023  润新知