我想开机手动运行sudochmod777/dev/ttyTHS1命令来启动并口
systemctl命令添加开机启动可以直接写命令,也可以写脚本,我这儿主要写个脚本
//首先使用sudo 命令创建一个.sh文件
$ vim openttyTHS1.sh
下边是写在.sh文件中的脚本命令,#!/bin/bash是写.sh脚本必须添加的,否则会报错
一定要在linux下创建.sh文件!!!!
#!/bin/bash
sudo chmod 777 /dev/ttyTHS1
之后赋于脚本执行权限
$ chmod +x openttyTHS1.sh
接出来要到**/etc/systemd/system/**创建systemctl文件,后缀为.service
//首先使用sudo 命令创建一个.service文件
$ vim openttyTHS1.service
[Unit]
Description=JetBot start service
After=multi-user.target
[Service]
Type=oneshot
User=root
ExecStart=/usr/bin/openttyTHS1.sh
WorkingDirectory=/home/jetbot
[Install]
WantedBy=multi-user.target
~
一定要注意User=root否则会报sudo之后没有密码之类的错误
之后命令
sudo systemctl enable openttyTHS1
sudo systemctl start openttyTHS1
这样就完成开机启动了,可以重启试试
假如须要查看已有的服务,可以使用:
sudosystemctllist-units
假如有些服务文件,即使早已在服务文件的目录下linux开机自动运行,而且它不是热生效的,即不是说俺们把它放进去能够被辨识、注册、启动的。它没有被systemctl的start或enable命令登记到Systemd,假如你须要的话,得自己做这个操作。
假如想查看没被激活的服务文件如何办呢?
sudosystemctllist-unit-files
言归正传,第三四行的rm操作就是杀死这个文件,假如我们更改了一个服务文件,但是Systemd不晓得,由于它缓存了一份服务,所以须要重新载入,否则它还是使用旧的。这个行为类似于servicenginxreload,在这儿是:
sudosystemctldaemon-reload
最后,倘若是删掉服务文件的话,又不一样了,虽然我们reload,Systemd已经可以使用自己缓存的服务文件,哪怕你用了daemon-reload更新。所以这时侯要告诉Systemd,我们早已舍弃不存在的服务文件了linux服务器系统,让它也舍弃自己缓存的那份:
systemctlreset-failed
1.[Unit]
主要是对这个服务的说明,内容linux qq,文档介绍以及对一些依赖服务定义
Description服务描述,作为systemctlstatus命令输出的一个介绍
Documentation一个url定义服务的具体介绍网址
After在哪些服务启动以后
Before在哪些服务启动之前启动
Requires依赖其他的单元服务,须要与列举的服务一起激活,若任何服务未能启动,则该单元不会被激活
Wants比Requires依赖性弱,弱其他服务没有启动成功,该服务也不受影响,只是表示一种推荐
2.[Service]
服务的主体定义,主要定义服务的一些运行参数,及操作动作
Type
1.simple默认参数,进程作为主进程
2.forking是后台运行的方式,主进程退出,os接管子进程
3.oneshot类似simple,在开始后续单元之前,过程退出
4.DBUS类似simple,但此后的单元只在主进程获得D总线名称以后才启动
5.notify类似simple,然而此后的单元仅在通过sd_notify()函数发送通知消息以后才启动
6.idle类似simplelinux开机自动运行,服务二补码文件的实际执行被延后到所有作业完成为止,不与其他服务的输出相混和,如状态输出与服务的shell输出混和
3.[Install]
服务安装的相关设置,通常可设置为多用户的
其他更为详尽的sysytemctl操作请参考
阮一峰的网路日志——Systemd入门教程:实战篇