开机自启脚本方法
# 背景
我在使用mac的过程中,下载了一些如zookeeper、redis等软件,但是每次启动的时候,
- 我可能需要重新去对应的路径下使用shell命令启动一次。
- 长时间不用,下一次需要使用可能会忘记安装的路径在哪里,可能会忘记启动命令是什么。
如果我们可以让电脑在开机时能够自行启动,那么以上的问题都可以轻松的解决
# 一.systemd系统
什么是systemd
你正在运行一个基于 systemd 的操作系统,传统的 init 脚本已被本地的 systemd 服务文件所取代。服务文件提供了非常类似于 init 脚本的功能。要使用服务文件,只需调用 "systemctl" 命令,它将输出所有当前运行的服务(和其他单元)的列表。使用 "systemctl list-unit-files" 命令获取所有已知单元文件的列表,包括已停止、禁用和屏蔽的单元文件。使用 "systemctl start foobar.service" 和 "systemctl stop foobar.service" 分别启动或停止一个服务。有关更多详细信息,请参考 systemctl(1)。
请注意,在 systemd 系统上,传统的 init 脚本仍然能够正常工作。在系统初始化期间,init 脚本 /etc/rc.d/init.d/foobar 会被隐式映射到一个服务单元 foobar.service 中。
使用ps -ef | grep systemd
查看是否是systemd系统
# 自启举例
linux很多都是用过systemd来进行开机执行的shell
例如以下命令大家有可能都是用过:
#启动:
sudo systemctl start httpd
#重启:
sudo systemctl restart httpd
#停止:
sudo systemctl stop httpd
#设置开机启动:
sudo systemctl enable httpd
2
3
4
5
6
7
8
那如果我们也想要编写一个shell脚本,让开机的时候能够自行启动的话呢?
# 步骤
- 首先,我们需要先写好我们对应的开机脚本,并cd到对应的文件目录
例如:
cd /home/tommy
- 编写相关的service文件(重要)
只需要修改 ExecStart 和 ExecReload 等为你需要执行的 shell 脚本即可
[Unit]
Description=
Documentation=
After=network.target
Wants=
Requires=
[Service]
ExecStart=/home/downey/test.sh # 使用start命令时使用的脚本
ExecStop=
ExecReload=/home/downey/test.sh # 机器重启时使用的脚本
Type=simple
[Install]
WantedBy=multi-user.target
2
3
4
5
6
7
8
9
10
11
12
13
14
15
将 service 脚本放到 /etc/systemd/system/ 或者 /usr/lib/systemd/system 目录
cp /路径/test.sh /etc/systemd/system/
1测试启动
sudo systemctl start test.service
- 添加开机启动
sudo systemctl enable test.service
- 重启检查一下 设置是否生效
reboot
- 查看systemd服务状态
ps -ef|grep test.service
# 二.mac系统
- 编写一个shell脚本
- 修改shell文件的脚本为
sudo chmod 777 run.sh
3、右键点击run.sh->显示简介,主要将打开方式修改为终端,共享和权限将所有权限打开。
4、进入系统偏好设置->用户与群组->登陆项,将haha.sh添加到登陆项,并勾选前面的隐藏选项卡,重新启动即可。
5.验证:
现在 Documents目录下不存在文件夹
重启电脑后,再看一下这个文录,已经有haha文件夹了,说明run.sh脚本开机已经自启动了
# 常见问题
# 权限问题
自动执行某些脚本,因为用户还没有登录导致权限不足
在shell脚本中使用sudo命令,可以通过配置sudoers文件来避免需要手动输入密码。
以下是一些步骤来设置sudoers文件:
- 打开终端并输入以下命令以编辑sudoers文件:
Copy code
sudo visudo
2
- 在sudoers文件中添加一行来允许指定的用户执行sudo命令而不需要输入密码。例如:
sqlCopy code
yourusername ALL=(ALL) NOPASSWD: ALL
2
请将"yourusername"替换为你的用户名。
- 保存并退出sudoers文件。
现在,你可以在shell脚本中使用sudo命令而不需要输入密码。
例如,如果你想在shell脚本中以root权限创建一个名为“testfile”的文件,你可以使用以下命令:
bashCopy code
sudo touch /path/to/testfile
2
另外如果还是不行,建议将受影响的目录修改权限
chmod -R 777 /path