Linux自动化脚本入门:从零编写并定时执行你的第一个脚本
开始前的准备工作
动手写Linux自动化脚本之前,你需要确认三件事:一台运行的Linux服务器(可以是云服务器或本地虚拟机)、SSH远程连接工具(如Xshell、FinalShell或系统自带终端)、以及基本的文本编辑能力。
大部分Linux发行版都内置了Bash解释器和cron服务,无需额外安装。
如果你用的是最小化安装的系统,可以先用which bash看看Bash是否存在,用which crontab确认cron是否可用。
如果缺少,用包管理器装一下就好。
编写第一个自动化脚本
登录到你的服务器后,先找一个目录存放脚本,比如~/scripts。
执行mkdir -p ~/scripts && cd ~/scripts新建并进入该目录。
随后用vim或nano创建一个文件:
nano my_first_script.sh
在文件中写入以下内容(这是一个简单的备份脚本示例):
#!/bin/bash
# 自动备份 /var/www/html 到 /backup 目录
BACKUP_DIR="/backup"
SOURCE_DIR="/var/www/html"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
tar -czf "${BACKUP_DIR}/html_backup_${TIMESTAMP}.tar.gz" -C "$SOURCE_DIR" .
echo "备份完成:${BACKUP_DIR}/html_backup_${TIMESTAMP}.tar.gz"
保存退出后,关键一步是给脚本加上执行权限:
chmod +x my_first_script.sh
现在可以手动运行看看效果:./my_first_script.sh。
如果看到输出“备份完成”以及文件路径,说明脚本本身没毛病。
注意$SOURCE_DIR路径要根据你实际要备份的位置修改。
用cron设置定时任务
脚本写好了,但每次手动运行太麻烦。
Linux自带的cron服务可以帮你定时自动执行脚本。
使用命令crontab -e进入当前用户的定时任务编辑界面(首次会提示选择编辑器,选vim或nano均可)。
在这个文件中,每一行代表一个定时任务,格式是:
分 时 日 月 周 要执行的命令
例如,每天凌晨2点执行刚才的备份脚本:
0 2 * * * /home/youruser/scripts/my_first_script.sh
0 2 * * *表示“每天2点0分”。
注意路径要写绝对路径,因为cron执行时的环境变量与SSH登录时不同。
保存退出后,cron会自动加载新任务。
可以用crontab -l查看当前所有定时任务,确认你的条目已存在。
避坑指南(看到就是赚到)
新手写Linux自动化脚本最容易踩的坑有三个:
- 路径问题:脚本里如果使用了相对路径(比如
./),cron执行时可能找不到文件。务必在脚本开头用cd切换到安全目录,或者所有路径都写绝对路径。上面示例中的BACKUP_DIR和SOURCE_DIR都是绝对路径,这样才可靠。 - 环境变量缺失:cron环境比交互式终端干净很多,比如
PATH可能只有/usr/bin:/bin。如果脚本里用到了非标准路径下的命令(如某些自定义工具),建议在脚本里显式设置PATH:export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。 - 日志输出无声:脚本出错时,cron会通过邮件通知,但普通服务器未必配置了邮件系统。强烈建议在cron任务中把标准输出和错误输出重定向到日志文件:
0 2 * * * /home/youruser/scripts/my_first_script.sh >> /var/log/backup.log 2>&1
>>表示追加写入,2>&1把错误信息也收集到同一个日志中。
这样第二天可以cat /var/log/backup.log查看执行情况。
效果验证与常见问题
完成上述配置后,如何确认自动化脚本真的在按计划运行?
- 手动测试:先手动执行一遍脚本,确认无报错。
- 查看cron日志:许多Linux系统的cron日志在
/var/log/cron,用grep my_first_script /var/log/cron可以过滤出相关执行记录。 - 检查输出文件:比如上例中到
/backup目录下查看是否有备份包生成,以及日志文件中是否有成功信息。 - 常见问题:cron命令不执行?检查
cron服务是否启动:systemctl status crond(CentOS)或systemctl status cron(Ubuntu)。如果没启动,用systemctl enable crond --now启动并设置开机自启。脚本权限不足?除了chmod +x,还要确认脚本所属用户与cron任务用户一致。
如果你正在处理Linux自动化脚本,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
坚持写几次,你会发现服务器运维越来越轻松。