[Unit] Description=MongoDB Database Server Documentation=https://docs.mongodb.org/manual After=network.target [Service] User=mongod Group=mongod Environment="OPTIONS=-f /etc/mongod.conf" EnvironmentFile=-/etc/sysconfig/mongod ExecStart=/usr/bin/mongod $OPTIONS ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb PermissionsStartOnly=true PIDFile=/var/run/mongodb/mongod.pid Type=forking # file size LimitFSIZE=infinity # cpu time LimitCPU=infinity # virtual memory size LimitAS=infinity # open files LimitNOFILE=64000 # processes/threads LimitNPROC=64000 # locked memory LimitMEMLOCK=infinity # total threads (user+kernel) TasksMax=infinity TasksAccounting=false # Recommended limits for for mongod as specified in # http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings [Install] WantedBy=multi-user.target
[Unit]:控制单元
Description:单元信息的描述
Documentation:相关的文档信息连接
Wants:本单元启动了,它“想要”的单元也会被启动。但是如果“想要”的单元启动不成功,对本单元没有影响。
Requires: 本单元启动了,那么它“需要”的单元也会被启动; 它“需要”的单元被停止了,它自己也不能正常使用。但是请注意,这个设定并不能控制本单元与它“需要”的单元的启动顺序,即 Systemd 不是先启动 Requires 再启动本单元,而是在本单元被激活时,并行启动两者。如果 Requires 先启动成功,那样本单元才会启动成功; 如果 Requires 启动得慢,那本单元就会失败。所以为了系统的健壮性,不建议使用Requires,而建议使用 Wants 。可以使用多个 Requires。
Conflicts:如果冲突单元启动了,那本单元就不能正常启动。
OnFailure:如果本单元失败了,那么启动其它的什么单元。
Before/After:要是一个单元 Before 另一个服务,那么在并行启动时(Systemd 总是用进程 0 并行启动所有东西,然后通过这两个标记来二次等待排序),那另一个服务这时就会等这个服务先启动并返回状态,注意是先启动而不是启动成功,因为失败也是一种状态,一定要成功才启动另一个服务是通过依赖关系定义的。反之 After 亦然。
定义服务本体 [service]
安装服务 [install]
这可能有点绕,我服务文件都弄好了,放到 /etc/systemd/system(供系统管理员和用户使用),/usr/lib/systemd/system(供发行版打包者使用)了,不就是安装好了嘛。
这里说的是一种内部状态,默认你放对位置它显示的是 disabled,unloaded,所以我们要在 Systemd 内部对它进行一下 load,没人要的东西是不需要安装的(我们不收渣渣),所以我们要告诉 Systemd 它是有人要的,被谁要。一般都是被
[Install]
WantedBy=multi-user.target
要(multi-user.target 表示多用户系统好了,简单理解就是你可以登入了)。这样在 multi-user.target 启用时,我们的服务也就会被启用了。
[Install] 部分下除了 WantedBy 还有两种属性,分别是:
- Alias= 给你自己的别名,这样 systemctl command xxx.service 的时候就可以不输入完整的单元名称。比如你给 NetworkManager 一个别名叫 Alias=nm,那你就可以 systemctl status nm.service 查看实际是 NetworkManager.service 的服务了。
- Also= 安装本服务的时候还要安装别的什么服务。比如我们的 He.net 脚本按理应该需要一个 iproute2.service 作为 also,但是 iproute2 实际上不需要 systemd 控制,所以就没写。它和 [Unit] 定义里面的依赖关系相比,它管理的不是运行时依赖,而是安装时。安装好了之后启动谁先谁后,谁依赖谁,和 Also= 都没有关系。
参考 https://blog.csdn.net/djskl/article/details/46671453,如有侵权,麻烦联系 joshualwork@163.com 删除。