最近公司有个好玩的项目,准备采用树莓派/arduino作为原型机,恰好我的玩具箱里两者都有

擦擦尘土,把树莓派带到公司

上周把arduino借给老板了,各种传感器也在其中,他出差没回,我的树莓派没有传感器可用,只要先折腾些软件应用

公司的代码托管服务器是我之前搭建的(用了gogs),我们部门搬到楼下,连接代码托管服务器需要vpn(网络的坑),速度不快,索性决定,在下边也搭建一个代码托管服务器。

(考虑到安全,我还是决定自己折腾着玩好了,不过这个场景确实是挺实际的场景)

目的

这篇文章主要是想在树莓派上练习一下进程管理和开机自启

树莓派的入门

这类文章网上好多,我自己也有笔记,等有空再整理好了。

对于装好系统的树莓派(我用的是Raspbian),你就把它当做一个普通的linux便可,没有太多特别的地方(习惯使用Debian/Ubuntu的话,用起来很轻松)

安装gogs

目录结构

我在HOME目录下建了个文件夹mylab,用以做实验,gogs也放在这里

下载二进制安装包:https://dl.gogs.io/gogs_v0.9.60_raspi2.zip

解压:unzip gogs_v0.9.60_raspi2.zip,于是获得gogs的解压目录:/home/pi/mylab/gogs (我的操作用户是默认的pi)

初始化

进入/home/pi/mylab/gogs目录,将gogs跑起来:./gogs web,默认跑在3000端口,打开你的ip:3000,填好内容,就可以初始化了,如果使用sqlite就不需要安装数据库

初始化完毕我们把./gogs web断掉(ctrl-c),下边演示使用使用Supervisor来管理进程

关于gogs的更多细节可以参考我之前的笔记搭建 gogs 代码托管服务器

使用Supervisor来管理gogs进程

关于supervisor的介绍和细节何以参考我此前的笔记:使用Supervisor来管理进程

安装

sudo pip install supervisor #安装supervisor

配置

切换到root:

1
2
echo_supervisord_conf > /etc/supervisord.conf
mkdir /etc/supervisord.conf.d

/etc/supervisord.conf中的include部分修改为:

1
2
[include]
files = /etc/supervisord.conf.d/*.conf

创建/etc/supervisord.conf.d/gogs.conf,内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[program:gogs]

user=pi
directory=/home/pi/mylab/gogs
command=/home/pi/mylab/gogs/gogs web
environment = HOME="/home/pi", USER="pi"
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/gogs/stdout.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/gogs/stderr.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB

之后就可以使用supervisor来管理gogs了:

1
2
3
/usr/local/bin/supervisord 
supervisorctl restart gogs
supervisorctl status

开机自启

简单的方法是往/etc/rc.local加入/usr/local/bin/supervisord

重启机器,一切完备!