板端的发布程序自启动:
1、可以选择将应用程序和依赖打包到rootfs中,或者放到单独的eMMC分区中
2、自启动,在rootfs的 /etc/init.d/rcS 或者/etc/inittab
3、配置systemctl 自启动
3.1 自启动脚本路径
/lib/systemd/system/
3.2 撰写脚本service
参考:https://blog.csdn.net/kuangguiyun/article/details/125089060
参考:https://blog.csdn.net/cdnight/article/details/87717644
[Unit]
Description=mongodb程序
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/opt/mongodb-3.4.0/start.sh
ExecStop=/opt/mongodb-3.4.0/stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
自己写个例子
autopilot.sh
#!/bin/bash
sleep 10
sudo ip link set enp2s0 up
sudo ifconfig enp2s0 10.7.77.1 netmask 255.255.0.0
autopilot.service
[Unit]
Description=calmcar autopilot service
DefaultDependencies=no
Requires= network.target
After=rc-local.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/nvidia/autopilot.sh
ExecStop=/home/nvidia/autopilot_shutdown.sh
TimeoutSec=70
TimeoutStopSec=71
[Install]
WantedBy=multi-user.target
脚本下载:https://gitee.com/hiyanyx/systemctl-self-start-upon-startup
sudo cp /home/nvidia/autopilotV2/autopilot.service /lib/systemd/system/
重新载入系统脚本,
sudo systemctl daemon-reload
启动:
systemctl start mongodb
查看状态是
systemctl status mongodb
关闭重启是
systemctl stop和restart mongodb
添加开机启动是:
sudo systemctl enable autopilot.service
sudo systemctl disable autopilot.service
4、自启动 /etc/init.d/rcS 和 systemctl 的区别是什么?
/etc/init.d/rcS 和 systemctl 都是用于管理系统服务的工具,但它们在功能和用法上有一些区别。
/etc/init.d/rcS 是一个传统的 Linux 启动脚本,通常在系统启动时运行。它包含了各种系统服务的启动和停止命令。在 Linux 系统中,启动脚本是放在 /etc/init.d/ 目录下的,这些脚本在系统启动时按顺序执行,用于启动各种系统服务。其中,rcS 是一个特殊的启动脚本,通常被用来初始化系统环境,它的内容主要是调用 /etc/init.d/rcN.N 脚本(N.N 表示脚本的版本号)。
systemctl 是 systemd 系统和服务管理工具的命令行接口。systemd 是 Linux 系统上一个重要的初始化系统,它取代了 SysVinit 系统,成为了现代 Linux 系统上默认的初始化系统。systemctl 命令可以用来管理系统上运行的服务以及其他与 systemd 系统相关的功能。通过 systemctl 命令,我们可以控制服务的启动、停止、重启、查看状态等操作,还可以设置服务在开机时自动启动或禁用等。
总的来说,/etc/init.d/rcS 和 systemctl 都是用于管理系统服务的工具,但它们的使用方式和功能略有不同。/etc/init.d/rcS 更适用于传统的 Linux 启动脚本管理方式,而 systemctl 则提供了更为全面和灵活的服务管理功能。
自启动的多种方式
在Linux系统中,如果你想让开机自动运行的脚本具有管理员权限(即root权限),但不希望手动输入密码,有几种方法可以实现这一目标:
-
使用sudoers文件:
你可以编辑/etc/sudoers
文件来允许特定的用户或命令无需密码即可执行sudo。为了安全起见,建议使用visudo
命令来编辑此文件,因为visudo
会检查你的编辑是否有语法错误。例如,如果你想让脚本
/path/to/your/script.sh
能够无密码运行,你可以添加以下行:username ALL=(ALL) NOPASSWD: /path/to/your/script.sh
其中
username
是运行脚本的用户名。这样,当这个用户执行这个脚本时,sudo就不会要求输入密码。 -
使用setuid位:
你可以设置脚本文件的setuid位,使其以文件所有者的身份(通常是root)执行。这样,即使脚本由普通用户启动,它也会以root权限运行。sudo chmod u+s /path/to/your/script.sh
但是,这种方法要求脚本内部不需要输入任何密码,因为一旦设置了setuid位,脚本将以root身份执行所有命令。
-
使用root的cron作业:
你可以在root的cron作业中设置脚本的自动执行。这样,cron守护进程(作为root运行)将执行脚本,而不需要任何密码。sudo crontab -e
然后在cron作业中添加类似以下的行:
@reboot /path/to/your/script.sh
这将在系统启动时执行脚本。
-
使用init.d脚本或systemd服务:
如果你的系统使用Systemd作为初始化系统,你可以创建一个systemd服务文件,并在其中指定脚本的执行。这种方法允许你定义脚本的启动条件,并且可以通过设置适当的权限来避免密码提示。例如,创建一个名为
your-script.service
的systemd服务文件:[Unit] Description=My Script After=network.target [Service] Type=simple ExecStart=/path/to/your/script.sh Restart=always User=root [Install] WantedBy=multi-user.target
然后启用服务:
sudo systemctl enable your-script.service
这将使得脚本在系统启动时自动运行。文章来源:https://www.toymoban.com/news/detail-836480.html
安全注意事项:文章来源地址https://www.toymoban.com/news/detail-836480.html
- 自动化root权限的脚本执行可能会导致安全问题,因为它允许脚本无限制地访问系统资源。确保你完全信任并理解脚本的功能。
- 尽量避免在脚本中硬编码root密码,因为这会导致安全风险。
- 使用上述方法时,请确保你已经仔细考虑了潜在的安全隐患,并且只在必要时才允许脚本以root权限运行。
到了这里,关于开机自启动,自动运行的脚本具有管理员权限(即root权限),但不希望手动输入密码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!