shell的GoodCoder的编写

本文介绍了runit,一个用于管理应用程序启动的工具,它依赖于Procfile来定义进程及其启动命令。Procfile中的进程名字由字母、数字和下划线组成,且不支持后台命令。runit默认使用当前目录下的Procfile,并可以从.env文件中读取环境变量。runit提供了检查文件格式、启动进程、打印帮助等选项。日志会按进程颜色区分,且runit能响应SIGINT和SIGTERM信号,确保在子进程结束时退出。代码展示部分提供了实现runit功能的shell脚本规范和限制。
摘要由CSDN通过智能技术生成

runit是一个应用(application)启动管理工具。通过Procfile文件启动相应的进程。

1 试题描述

1.1 Procfile

Procfile 包含进程名字和启动进程的命令,用:分隔。如:

web: python -m SimpleHTTPServer $PORT
date: date $DATE_FORMAT
web_2: while true ; do nc -l $PORT < index.html
  • 进程名字可以包含:字母, 数字, 下划线
  • Procfile中不可以写后台命令
  • runit将这些命令运行在后台
  • runit默认使用当前路径下的Procfile文件
  • 如果多次使用$PORT变量,则值递增。如第一个PORT的值是8080,则第二个PORT的值为8081,如果不在.env中设置PORT变量的值,则自动设置默认值为8080

1.2 环境变量

如果当前目录下存在.env文件,则从其中读取环境变量。这个文件由 键/值对 构成。如:

PORT=8080
DATE_FORMAT='+%Y-%m-%d|%H:%M:%S'

1.3 程序执行

  • runit 启动Procfile中的所有进程
  • runit -f procfile -e env_file
  • runit -c 检查Procfile, env_file文件格式的正确性
  • runit -h 打印帮助

1.4 其他要求

  • Procfile和.env文件中可存在#注释
  • usage内容第一行如下, 其余内容自由发挥
Usage: runit [-c] [-f procfile|Procfile] [-e envfile|.env]
  • 日志打印到屏幕,格式如下,不同的进程的日志输出不同的颜色(web, date, web_2分别是不同的颜色)
11:39:45 web    | python -m SimpleHTTPServer 8080 started with pid 781
11:39:45 date   | date +%Y-%m-%d|%H:%M:%S started with pid 790
11:39:45 web_2  | nc -l 8081 < index.html started with pid 801
  • runit按照Procfile的描述启动进程,例如web就是启动一个前台进程(非后台进程或daemon)
  • runit可以接收SIGINT和SIGTERM信号,杀掉已启动的进程。确保runit在子进程运行结束后才退出。(如果进程可瞬间完成或是后台进程,则这个功能不起作用)
  • 除grep外不允许使用其他外部命令,如:sed, awk, ps, bc
  • 遵循shell编程规范

二、代码展示

#!/bin/bash
#
#Copyright (c) 2016 Baidu.com,Inc. All Right Reserved
#
#Author:panlu@baidu.com
#Date:2016/08/17
#
#Brief:
#  process launcher
#Globals:
#  PORT COLOR_ARRAY
#Arguments:
#  -c check
#  -f procfile
#  -e envfile
#  -h help
#Returns:
#  succ:0
#  fail:1

set -o pipefail

# environment
SPORT=8080
COLOR_ARRAY=('32' '33' '34' '35' '36')

# variable
procfile=""
envfile=""

#####################################
#Brief:
#  usage
#Globals:
#  none
#Agruments:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值