服务器启动出现问题

上周,在登陆网盘时突然发现连接不上,经过多方排查,发现是HostHatch后台出现了启动问题。差点以为数据要丢失了,结果是虚惊一场。但这也说明HostHatch的数据安全问题没有很好的保障,并且也不支持磁盘快照功能,不过这也是没有办法的事,毕竟是便宜的大盘鸡。只是今后要想个办法对我的数据进行自动备份。

systemd及service文件详解——以amule为例

上篇文章谈到了编译安装的amule没有自启动脚本,但看了一下传统的init启动脚本,眼晕,经过衡量,最后决定自己编写sysytemd.service启动脚本以满足自身需要。

systemd介绍

Systemd 是 Linux下的一款系统和服务管理器,相比于传统的服务管理方法比如自制脚本,具有文件编写简单,功能可靠,以及方便统一管理等优点。Systemd 有很多不同类型的使用单元(unit),主要包括:系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)。一般我们常用的是其中的系统服务。

Systemd的系统服务的单元文件(.service)可以从两个地方加载

/usr/lib/systemd/system/ #软件包安装的单元
/etc/systemd/system/ #系统管理员安装的单元

一般来说我们手动编写的单元都放在第二个目录下

service文件内容

service文件包含几个常用的小节,每个小节以[*]开头,来说明小节的内容

[Unit]: 

这个项目内主要在规范服务启动的脚本、环境配置文件文件名、重新启动的方式等等。主要包括:

  • Description:描述这个 Unit 文件的信息
  • Documentation:指定服务的文档,可以是一个或多个文档的 URL 路径
  • Requires:依赖的其它 Unit 列表,列在其中的 Unit 模板会在这个服务启动时的同时被启动。并且,如果其中任意一个服务启动失败,这个服务也会被终止
  • Wants:与 Requires 相似,但只是在被配置的这个 Unit 启动时,触发启动列出的每个 Unit 模块,而不去考虑这些模板启动是否成功
  • After:与 Requires 相似,但是在后面列出的所有模块全部启动完成以后,才会启动当前的服务
  • Before:与 After 相反,在启动指定的任务一个模块之间,都会首先确证当前服务已经运行

[Install]

这部分配置的目标模块通常是特定运行目标的 .target 文件,用来使得服务在系统启动时自动运行。这个区段可以包含三种启动约束:

  • WantedBy:和 Unit 段的 Wants 作用相似,只有后面列出的不是服务所依赖的模块,而是依赖当前服务的模块。默认使用WantedBy=multi-user.target
  • Also:当前 Unit enable/disable 时,同时 enable/disable 的其他 Unit
  • Alias:当前 Unit 可用于启动的别名

[Service]

用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段分为服务生命周期和服务上下文配置两个方面。

服务生命周期控制相关:

  • Type:定义启动时的进程行为,它有以下几种值:
    • Type=simple:默认值,执行ExecStart指定的命令,启动主进程
    • Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
    • Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
    • Type=dbus:当前服务通过D-Bus启动
    • Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
    • Type=idle:若有其他任务执行完毕,当前服务才会运行

目前使用默认type就能满足绝大多数需要

  • ExecStart:启动当前服务的命令
  • ExecStartPre:启动当前服务之前执行的命令
  • ExecStartPos:启动当前服务之后执行的命令
  • ExecReload:重启当前服务时执行的命令
  • ExecStop:停止当前服务时执行的命令
  • ExecStopPost:停止当其服务之后执行的命令
  • RestartSec:自动重启当前服务间隔的秒数
  • Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括 always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

服务上下文配置相关:

Environment:为服务指定环境变量

User:指定运行服务的用户

Group:指定运行服务的用户组

amule系统服务unit配置

需求:以root用户运行,随着系统启动运行,能通过systemd命令启动与停止

文件样板:

[Unit]
Description=Amule
After=network.target

[Service]
ExecStart=/usr/local/bin/amuled 
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

编译安装amule非GUI小记

ed2k尽管是一种老旧的p2p下载方式,但其中确实包含着不少资源(尤其是小姐姐的电影),更是自带优秀的搜索引擎。但在中国非公网及恶劣的p2p环境下,资源传播速度非常有限。正好手上有台vps,经过仔细研究,成功完成了ed2k下载程序amule的server版编译安装及运行,现记录步骤如下:

依赖

过程

1、下载文件

2、安装wxWidgets-2.8.12

由于是已经配置好环境的vps,所以常见的编译环境都有,不需要特别配置

#解压文件
tar zxvf wxWidgets-2.8.12.tar.gz
#配置文件
cd wxWidgets-2.8.12
./configure --disable-gui --enable-unicode --without-subdirs --without-expat
#编译并安装(为了快速安装,采用了双进程编译,-j的参数设置为4会安装失败)
make -j 2
su root
make install && make clean
ldconfig

3、安装aMule-2.3.3.tar.gz

#解压文件
tar zxvf aMule-2.3.3.tar.gz
#配置文件(非GUI)
cd aMule-2.3.3
./configure --enable-amule-daemon --enable-amulecmd --enable-webserver--enable-optimize  --disable-monolithic --disable-monolithic
#编译并安装
make
su root
make install && make clean

4、配置amule

在第一次使用amule时应该对其进行配置:

#初始化amuled配置
amuled --ec-config 
获得ECPassword或者webSever的passowrd的md5值
echo -n yourpassword | md5sum
vim ~/.aMule/amule.conf

然后修改AcceptExternalConnections=1 ,在amule.conf文件中修改ECPassword的值为yourpassword的md5值。如果想启动webserver还应该修改Enabled=1,修改password为yourpassowrd的md5值

5、启动amule

amuled -f //以全后台方式启动amule主程序

成功,可以用远程客户端和你设置的密码yourpassword登陆amule了

目前存在的问题:缺乏开机启动脚本,需要额外配置

总结

总体来说,通过配置amule服务端,让我学会了linux简单编译安装,是一个巨大的提升,今后还要再次加油,提升自身技术水平,特此纪念

网盘又复活了

经过宝塔面板的帮助,对比了seafile、owncloud以及nextcloud的部署方式,最终还是选择了owncloud的方案进行网盘部署。虽然因为owncloud过度商业化导致功能受到了一定的限制,其内置的php版本也不是最新,但是相比于其衍生品nextcloud,owncloud更加稳定。同seafile相比 ,owncloud基于php的部署方式轻量化且简单,且与宝塔面板高度契合,非常方便统一管理;而seafile基于java的结构,需要额外配置java环境,虽然可靠性更高,但与宝塔面板不是很兼容,且不易于维护(对java环境不了解),因此,最后选择了owncloud作为最终解决方案。

这次部署,有了宝塔面板的管理,免去了无数配置麻烦,可以说是十分轻松流畅,但是也不能忽视基础知识的学习,为今后维运经验的进步打下坚实的基础。

服务器更新

好久没更新了,最近一直在犯懒,所以说点话,水一水字数。

首先是与兔兔的关系,已经进展得很顺利了,因为熊熊和兔兔都在不断成熟,吵过的架越来越少,这是个好事。熊熊也开始慢慢学会了怎么营造浪漫的气氛,相信熊熊和兔兔的未来会越来越好。

其次是学习这一方面,还是要继续加油,不要犯懒,相信自己能取得满意的成绩,一定要加油啊。

还有哦,现在外面疫情还是很严重,工作的话,最好不要找那种有坑的工作,好多工作都是来压榨学生劳动价值的,这样的公司不值得为他们打工,不过现在形势不好,也不能把心理预期定得太高,这不是好事,总之,这个世界没有想得那么好,也没有想得那么坏。

我的字数水完了,服务器也重启了,可以说再见了

拜拜?