Linux中用shell脚本设置某个可执行文件或者命令自启动
ps:经理给了个需求,要把我们的产品设置自启动,我就说可以用crontab
添加到自启动,结果是说那边实施部门去给客户部署产品,不会命令行需要一键脚本设置自启动,好嘛这就又需要shell
了。
首先介绍crontab
crontab
是一个在Linux和Unix操作系统上用于安排定期执行任务的工具。它允许用户按照指定的时间间隔自动运行命令或脚本,可以设置任务在每天、每周、每月或者更长的时间周期内运行。通过编辑crontab
文件,用户可以管理定时任务并设置它们的执行时间和频率。crontab
是一个非常有用的工具,特别是在需要定期备份、清理或更新系统的情况下。
crontab设置自启动步骤
1、打开终端并使用以下命令编辑crontab
文件:
crontab -e
2、在打开的文件中,添加以下行:
@reboot /path/to/your/command
其中@reboot
故名思义就是重启,也就是启动的时候就会执行后面的脚本或命令
要注意的是其中,/path/to/your/command
是在系统启动时执行的命令的完整路径也就是绝对路径,不能是相对路径。
3、重启测试就行了!
如何写shell一键设置自启动
对于如何设置自启动刚开始是一头雾水的,但是想到了以前在学校学Linux时候用过shell
脚本,那我们是不是可以写一个脚本,这个脚本可以写脚本(比如设置自启动),那么问题有了方向,也就好解决了,然后又想到路径的问题需要shell读取当前脚本的绝对路径,然后又发现crontab
是可以从crontab.txt
导入脚本的。
一键设置自启动脚本步骤
1、新建脚本reboot.sh
,写下下面内容:
#!/bin/bashdir="$( cd "$( dirname "${BASH_SOURCE[1]}" )" >/dev/null 2>&1 && pwd )"reboot_str="@reboot $dir/start.sh"echo "$reboot_str" > reboot.txtcrontab reboot.txt
下面我解释一下上面代码:
dir="$( cd "$( dirname "${BASH_SOURCE[1]}" )" >/dev/null 2>&1 && pwd )
:用于获取当前脚本所在目录的完整路径也就是绝对路径。
BASH_SOURCE[1]
表示当前脚本的相对路径;
dirname "${BASH_SOURCE[1]}"
获取当前脚本所在目录的路径;
cd "$( dirname "${BASH_SOURCE[1]}" )" >/dev/null 2>&1
切换到当前脚本所在目录,并将输出重定向到/dev/null以禁止任何输出;
pwd
获取当前目录的完整路径;
dir=
将当前目录路径赋值给变量dir
。
reboot_str="@reboot $dir/start.sh"
变量
reboot_str
定义,包含了一个crontab
任务的时间设置和要执行的命令。
$dir
是一个变量,表示当前脚本所在目录的完整路径;
$dir/start.sh
表示当前脚本所在目录中名为start.sh
的脚本文件;
@reboot
表示要在系统启动时运行该命令;
"$dir/start.sh"
是要运行的命令,它的完整路径是$dir/start.sh
。
所以,将@reboot $dir/start.sh
赋值给变量reboot_str
,实际上是将一个在系统启动时自动执行$dir/start.sh
的crontab
任务的时间设置和要执行的命令存储到变量中,以便后续使用。
echo "$reboot_str" > reboot.txt
将上一步中定义的
reboot_str
变量的值写入一个名为reboot.txt
的文本文件中。
要注意的是>
会覆盖,而>>
是追加。
crontab reboot.txt
导入
reboot.txt
的命令给crontab
任务,让他按照我们写的命令设置自启动。
这样设置一键自启动的脚本就写完了,这算是我工作的第一个需求吧(虽然很简单)记录一下,希望大家一起加油(冲,打工人!