Centos _ Ubuntu 自启动服务 - 测试记录 - 杂记
@
1. 启动服务文件创建位置
Ubuntu18.04的改动
sudo systemctl start XXX.service
systemctl service服务文件夹在/lib/systemd/system
(基本服务文件夹)与/etc/systemd/system
(开机启动文件夹)。
添加基本服务,可以在/lib/systemd/system
下创建 XXX.service
,当然 /etc/systemd/system
目录也是可以的。
2. 不同操作系统 sh 文件格式报错
问题关键的是在win10系统内创建文本,然后修改它的后缀为sh文件,看起来是没问题,但是一旦你拉到Linux过去,将它作为一个shell文件使用,shell终端会报203
错误,
没有解释器指向(#!/bin/sh
),但其实不是这个问题,是文件有问题,你应该在Linux系统内创建一个shell
文件,然后将脚本代码复制过去,而不是在Windows系统创建shell
文件
而且不要自作聪明,以为在Linux里面创建好shell文件后,在拖到Windows系统里,然后在拖到其他的Linux系统里,这看似没问题,但实际使用时依旧会报203
错误
我认为应该是系统格式问题,Linux——>Windows——>Linux 中间Windows系统格式把Linux的系统格式给改变了
3. sh 文件格式问题解释
主要原因是test.sh是我在windows下编辑然后上传到linux系统里执行的。
.sh
文件的格式为dos
格式。
而linux
只能执行格式为unix
格式的脚本。因为在dos/window
下按一次回车键实际上输入的是“回车(CR)
”和“换行(LF)
”,
而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。
我们可以通过vi编辑器来查看文件的format格式。步骤如下:
1.首先用vi命令打开文件
[root@localhost test]# vi test.sh
2.在vi命令模式中使用 :set ff
命令
可以看到改文件的格式为
复制代码 代码如下:
fileformat=dos
3.修改文件format
为unix
使用 vi/vim
修改文件格式 format
命令::set ff=unix
或者::set fileformat=unix
然后:wq
保存退出就可以了
还有Linux系统只需要前面表明解释器的代码,如shell文件是 #!/bin/sh
所以文件后缀是.sh
其实没什么,有没有加sh后缀,只是为了看起来方便而已,重点是解释器指向,即文件内有没 #!/bin/sh
,或者不加 #!/bin/sh
也可以,反正都是在 shell 终端运行,自然是用 shell 解释器运行文件
最后shell文件内的py
脚本运行文件记得加权限
chmod a+x xxx.py
4. /etc/systemd/system/xxx.service 服务文件配置
Type=forking
多数服务会在启动后放入后台,systemd通过Type=forking来支持这种工作方式。
如果启用该项,建议同时设置PIDFile
选项,这样可以帮助systemd更准确的定位到服务进程
PrivateTmp
保证一定的安全性 true
TimeoutStopSec
超时停止10s
Restart
在意外退出时重启 on-failure
RestartSec
重启间隔 5s
Alias
服务别名
service文件内容如下:
[Unit]
Description=XXX Service
[Service]
#用户一般是 root 用户
User=root
Type=forking
#该服务进程具体的shell执行文件,xxx 是文件名,不是文件夹名,我这里是将shell文件添加到/usr/sbin路径下,记得为shell文件配置权限 chmod a+x service文件不需要
ExecStart=/usr/sbin/XXX
ExecReload=/usr/sbin/XXX
ExecStop=/usr/sbin/XXX
PrivateTmp=true
#以下这些不用改,照旧就行
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Alias=XXX.service
弄好了上面的配置之后运行如下命令让服务生效,有的时候需要重启电脑才能生效,这是很多教程没提到的情况!
sudo systemctl daemon-reload
重载后运行
sudo systemctl start mycat.service
如果想加到开机启动,就运行
sudo systemctl enable XXX.service
上面这条命令是建立软连接,默认建立硬链接,除非加参数才是软连接
这个时候系统会自动加载mycat.service
到/etc/systemd/system
文件夹下,
很多教程直接自己链接过去,不推荐那么干,因为有的自己链接会出现未知的错误,
很难找到原因,容易翻车
Centos service
配置文件如下
[Unit]
Description=XXX Service
[Service]
#用户一般是 root 用户
User=root
Type=forking
#该服务进程具体的shell执行文件,xxx 是文件名,
#不是文件夹名,我这里是将shell文件添加到/usr/sbin路径下,
#记得为shell文件配置权限 chmod a+x service文件不需要
ExecStart=/usr/sbin/XXX start
ExecReload=/usr/sbin/XXX restart
ExecStop=/usr/sbin/XXX stop
PrivateTmp=true
#以下这些不用改,照旧就行
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Alias=XXX.service
Centos、Ubuntu服务启动命令:
systemctl start XXX.service
systemctl stop XXX.service
systemctl restart XXX.service
或者
service xxx start
service xxx stop
service xxx restart