版权申明:本文为neucrack的原创文章,遵守CC4.0BY-SA版权合同,转载请附上原文出处链接及本申明。
原文链接(持续更新):
sudosystemctllist-unit-files—type=service—state=enabled—all
方式一:简单的启动命令
直接在/etc/rc.local(/etc/rc.d/rc.local)文件中添加即可
ubuntu18.04不再使用initd管理系统,改用systemd
systemd默认读取/etc/systemd/system下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件,
通常系统安装完/lib/systemd/system/下会有rc-local.service文件,即我们须要的配置文件。
ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
cd /etc/systemd/system/ cat rc-local.service
rc-local.service内容
# SPDX-License-Identifier: LGPL-2.1+ ## This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.
# This unit gets pulled automatically into multi-user.target by# systemd-rc-local-generator if /etc/rc.local is executable.[Unit] Description=/etc/rc.local Compatibility Documentation=man:systemd-rc-local-generator(8) ConditionFileIsExecutable=/etc/rc.local After=network.target
[Service] Type=forkingExecStart=/etc/rc.local startTimeoutSec=0 RemainAfterExit=yesGuessMainPID=no
[Install] WantedBy=multi-user.targetAlias=rc-local.service
1)[Unit]区块:启动次序与依赖关系。
2)[Service]区块:启动行为,怎么启动,启动类型。
3)[Install]区块,定义怎样安装这个配置文件,即如何做到开机启动。
touch /etc/rc.local
chmod 755 /etc/rc.local
例如:
#!/bin/bash echo "test rc " > /var/test.log
技巧二:添加启动项initd启动管理系统中
1)在/etc/init.d目录下构建启动脚本,这儿构建了文件test
写入内容:(最好先阅读目录下的README文件说明)
注意所以路径必须是绝对路径
注意须要有LSB背部,即那一大堆注释,格式参考openSUSE:Packaginginitscripts
#!/bin/bash
### BEGIN INIT INFO
# Provides: Neucrack
# Required-Start: $remote_fs $syslog $network $named
# Required-Stop: $remote_fs $syslog $network
# Should-Start: $network $portmap
# Should-Stop: $network $portmap
# X-Start-Before: nis
# X-Stop-After: nis
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# X-Interactive: true
# Short-Description: ss auto start script
# Description: shadowsocks auto start script,
# This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
case "$1" in
start)
/home/neucrack/software/ss/start_kcptun_client.sh
/home/neucrack/software/ss/start_ss_local.sh
rc_status -v
;;
stop)
/home/neucrack/software/ss/stop_ss_local.sh
/home/neucrack/software/ss/stop_kcptun_client.sh
rc_status -v
;;
restart)
$0 stop
$0 start
rc_status
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
前面这脚本实际上在使用时出现了问题,/home/neucrack/software/ss/start_ss_local.sh这个命令仍然没有被执行,缘由是/home/neucrack/software/ss/start_kcptun_client.sh中的命令阻塞了进程linux 命令行启动进程linux 命令行启动进程,致使前面一句一直没有执行,可以将她们分别放在后台执行就行了,怎么在后台执行可以看文章最后一部份
(/home/neucrack/software/ss/start_kcptun_client.sh &)
(/home/neucrack/software/ss/start_ss_local.sh &)
2)设置脚本文件的执行权限
$ sudo chmod +x /etc/init.d/test
3)使用update-rc.d命令将脚本放在启动脚本中去(debian中可以使用更新的insserv):
$ cd /etc/init.d
$ sudo update-rc.d test defaults 95
注:其中数字95是脚本启动的顺序号,根据自己的须要相应更改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就晓得这个数字的具体作用了。更多说明建议看manupdate-rc.d。
也可以自己自动在rc*.d中构建软联接
$ ls -s test ../rc5.d/S95test
这儿的rc*.d,*代表启动级别,在不同启动级别启动,K开头的脚本文件代表运行级别加载时须要关掉的,S开头的代表相应级别启动时须要执行,数字代表次序
4)卸载启动脚本的方式:
$ cd /etc/init.d
$ sudo update-rc.d -f test remove
5)开机会手动手动,也可以自动调用
/etc/init.d/test start
/etc/init.d/test stop
/etc/init.d/test restart
在systemd服务管理系统中
要添加一个systemd服务,须要:
在/usr/lib/systemd/system或则/etc/systemd/system目录下新建文件,例如上面说过的rc-local.service,之后编撰内容例如sshd:
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
这儿有几个模块:
1)[Unit]区块:启动次序与依赖关系。
2)[Service]区块:启动行为,怎么启动,启动类型。
3)[Install]区块,定义怎样安装这个配置文件,即如何做到开机启动。
详尽的参数看指南
systemd服务常用命令(以mysql举例):
# 开机启动
systemctl enable mysqld
# 关闭开机启动
systemctl disable mysqld
# 启动服务
systemctl start mysqld
# 停止服务
systemctl stop mysqld
# 重启服务
systemctl restart mysqld
# 查看服务状态
systemctl status mysqld
systemctl is-active sshd.service
# 结束服务进程(服务无法停止时)
systemctl kill mysqld
方式三:在redhat,centos等系统中还可以使用chckconfig来设置手动启动的服务桌面系统手动启动
桌面系统搜索启动,打开启动管理器添加删掉即可
实用:用户退出后依然运行该进程的方式(通常用在须要仍然运行的进程,例如一个git服务器的进程,在创建后只要没死机都应当在运行,这个时侯就须要这个功能):
通常有以下几种方式:
1)在输入命令的最上面加上nohup命令
如nohupyour_command&这样命令在你退出后依然会在后台执行
2)setsid命令
setsidyour_command该命令的结果是使你所运行的命令的父进程为init,所以只有死机该进程就会停止
3)(your_command&)
就是用括弧将你的命令括上去,这样做也是使命令的父进程为init
4)disown
当你在命令行下输入your_command&后命令就在后台执行了,之后执行jobs命令,该命令会列举当前正在后台执行的命令。诸如输入命令“top&”
之后执行”jobs”
输出结果是
[1]+Suspended(ttyoutput)top
注意行开头方括弧内的数字,该数字称作jobspeclinux服务器配置与管理,是给当前后台运行的job的编号。这是你只要在命令行下输入”disown-h1”后台运行的top命令就不会遭到hangup讯号的影响了。
5)使用screen命令
在命令行下输入screen命令就开启了一个screen进程,它就似乎是一个全新的命令运行环境,在该环境中你可以像在正常的terminal下那样执行
命令linux软件工程师培训,而且这个screen是不受其父进程的hangup讯号的影响的,既然screen不受其父进程影响,当你意外死机或则退出系统时,在screen
中仍在执行的命令一直会继续执行。关于screen命令的使用方式你可以再去查阅相关资料。
参考