linux脚本设置开机自启

本文详细解析了Linux环境下各种Shell脚本(如/etc/profile, /etc/bashrc, ~/.bash_profile, ~/.bashrc)的加载时机与区别,帮助理解不同脚本的执行逻辑与作用范围。

也可以设置每次登录自动执行脚本,在/etc/profile.d/目录下新建sh脚本,
/etc/profile会遍历/etc/profile.d/*.sh

另外,几个脚本的区别:
(1) /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2) /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。

(3) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,设置一些环境变量,执行用户的.bashrc文件。

(4) ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是”父子”关系。

(6) ~/.bash_profile: 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
————————————————
版权声明:本文为优快云博主「yinnnnnnn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_35440678/article/details/80489102

<think>我们已经在之前的回答中详细介绍了三种方法(systemd、rc.local、cron)来实现开机和延迟自。 但是为了严格遵循当前要求的格式,我将重新组织答案,并确保包含代码示例和解释。 注意:由于问题要求最后提出四个相关问题,我将按照这个要求进行。 解决方案: 在Linux中,设置脚本开机并延迟动有多种方法,以下是三种常用方法: 方法一:使用systemd服务(推荐,适用于现代Linux发行版) 方法二:使用rc.local(传统方法,适用于较老系统) 方法三:使用cron的@reboot(用户级任务) 下面分别给出每种方法的实现步骤和代码示例。 1. 使用systemd服务 步骤: a. 创建一个服务文件 b. 用服务 示例:假设我们的脚本位于`/home/user/myscript.sh`,需要延迟30秒动。 创建服务文件:`/etc/systemd/system/mydelayedscript.service` ```ini [Unit] Description=Delayed Startup Script After=network.target # 在网络服务动后执行 [Service] Type=simple User=user # 替换为你的用户名 ExecStartPre=/bin/sleep 30 # 延迟30秒 ExecStart=/bin/bash /home/user/myscript.sh # 可选:设置失败时重 Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target ``` 然后执行: ```bash sudo systemctl daemon-reload sudo systemctl enable mydelayedscript.service ``` 解释: - `After=network.target` 确保在网络准备就绪后执行 - `ExecStartPre` 用于执行延迟命令(sleep) - `User` 指定运行脚本的用户 - `enable` 命令设置服务在开机动 2. 使用rc.local(适用于支持rc.local的系统) 步骤: a. 编辑`/etc/rc.local`文件 b. 添加延迟动的命令 示例:在`/etc/rc.local`文件中添加: ```bash #!/bin/bash # 延迟30秒后执行脚本,并在后台运行 (sleep 30; /bin/bash /home/user/myscript.sh) & exit 0 ``` 确保`/etc/rc.local`有可执行权限: ```bash sudo chmod +x /etc/rc.local ``` 注意:在基于systemd的系统上,可能需要用rc-local服务: ```bash sudo systemctl enable rc-local.service ``` 3. 使用cron的@reboot 步骤: a. 编辑当前用户的cron表 b. 添加@reboot任务并包含延迟 示例: ```bash crontab -e ``` 在打开的编辑器中添加一行: ```cron @reboot sleep 30 && /bin/bash /home/user/myscript.sh ``` 解释:`@reboot`表示在系统动时执行,`sleep 30`延迟30秒,然后执行脚本。 注意:这种方法以当前用户身份运行,不需要root权限(除非脚本需要)。 总结: - 对于系统级服务,推荐使用systemd,因为它提供更多的控制(如依赖关系、重机制、日志等)。 - rc.local适用于简单的系统级脚本,但功能有限。 - cron适用于用户级脚本设置简单。 最后,请确保你的脚本具有可执行权限: ```bash chmod +x /home/user/myscript.sh ``` 另外,在脚本中使用绝对路径,避免因环境变量问题导致执行失败。 §§相关问题§§: 1. 如何检查systemd服务的运行状态和日志? 2. 如何在脚本中确保网络完全可用(例如需要访问互联网)? 3. 如何设置脚本在图形界面登录后自动运行? 4. 如果脚本需要以root权限运行,在cron中如何设置?</think>### Linux 设置脚本开机及延迟自解决方案 #### 方法一:使用 systemd 服务(推荐) 这是最现代且功能最完整的方式,支持精确控制动顺序和延迟。 1. **创建服务文件** `/etc/systemd/system/delayed-script.service`: ```ini [Unit] Description=Delayed Startup Script After=network.target # 确保网络就绪 Requires=network.target # 依赖网络服务 [Service] Type=simple # 设置延迟动(60秒) ExecStartPre=/bin/sleep 60 ExecStart=/path/to/your/script.sh # 设置失败时自动重 Restart=on-failure RestartSec=30 # 设置环境变量(可选) Environment="MY_VAR=value" # 设置工作目录(可选) WorkingDirectory=/path/to/working/dir [Install] WantedBy=multi-user.target # 多用户模式时动 ``` 2. **用并管理服务**: ```bash # 设置文件权限 sudo chmod 644 /etc/systemd/system/delayed-script.service # 重新加载服务配置 sudo systemctl daemon-reload # 开机 sudo systemctl enable delayed-script.service # 立即动服务(测试) sudo systemctl start delayed-script # 查看服务状态 systemctl status delayed-script # 查看实时日志 journalctl -u delayed-script -f ``` #### 方法二:使用 rc.local(兼容旧系统) 适合简单脚本,但功能有限: 1. **编辑 `/etc/rc.local` 文件**: ```bash #!/bin/bash # 添加延迟动(30秒) sleep 30 # 后台运行脚本并记录日志 /path/to/your/script.sh > /var/log/myscript.log 2>&1 & # 必须保留退出状态 exit 0 ``` 2. **设置权限并用**: ```bash sudo chmod +x /etc/rc.local sudo systemctl enable rc-local.service ``` #### 方法三:使用 cron 的 @reboot(用户级任务) 适用于用户空间脚本: ```bash # 编辑当前用户的cron表 crontab -e ``` 添加以下内容: ```cron # 延迟45秒后执行脚本 @reboot sleep 45 && /path/to/your/script.sh # 可选:记录输出到日志文件 @reboot sleep 30 && /path/to/script.sh > ~/script.log 2>&1 ``` ### 关键注意事项 1. **脚本准备**: ```bash # 1. 添加shebang #!/bin/bash # 2. 使用绝对路径 /usr/bin/python3 /home/user/myscript.py # 3. 确保可执行权限 chmod +x /path/to/your/script.sh ``` 2. **延迟实现对比**: | 方法 | 延迟实现方式 | 优势 | |------------|--------------------------------|------------------------| | systemd | `ExecStartPre=/bin/sleep N` | 精确控制,支持依赖管理 | | rc.local | `sleep N && your_script &` | 简单易用 | | cron | `@reboot sleep N && script.sh` | 用户级任务,无需root权限 | 3. **高级systemd配置**: ```ini # 依赖特定服务(如数据库) After=postgresql.service Requires=postgresql.service # 设置最大重次数 StartLimitIntervalSec=500 StartLimitBurst=5 # 设置内存限制 MemoryLimit=512M ``` ### 故障排查技巧 1. **测试脚本环境**: ```bash # 模拟动环境 sudo systemd-run --pty --same-dir /path/to/script.sh ``` 2. **查看动日志**: ```bash # 查看系统动日志 journalctl -b -0 # 本次动日志 journalctl -b -1 # 上次动日志 ``` 3. **检查服务依赖**: ```bash systemctl list-dependencies delayed-script.service ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值