温馨提示×

ubuntu如何触发脚本自动化执行

小樊
40
2025-10-07 12:21:55
栏目: 智能运维

Ubuntu触发脚本自动化执行的常见方法

1. 手动执行(一次性或临时任务)

这是最基础的触发方式,适用于临时需要运行的脚本。操作步骤如下:

  • 打开终端,使用cd命令导航到脚本所在目录(如cd /home/user/scripts)。
  • 给脚本添加可执行权限:chmod +x script.shscript.sh为你的脚本文件名)。
  • 执行脚本:./script.sh(若脚本需要root权限,需用sudo ./script.sh)。

2. Cron定时任务(周期性自动执行)

Cron是Ubuntu系统自带的定时任务调度工具,适合按固定时间间隔重复执行脚本(如每天备份、每小时清理日志)。

  • 编辑当前用户的cron表:在终端输入crontab -e(若需root权限,用sudo crontab -e)。
  • 添加定时规则:在打开的编辑器中,按分钟 小时 日期 月份 星期 命令的格式添加一行。例如:
    0 3 * * * /home/user/backup.sh(每天凌晨3点执行backup.sh脚本);
    */5 * * * * /home/user/cleanup.sh(每5分钟执行一次cleanup.sh)。
  • 保存并退出:若使用nano编辑器,按Ctrl+XYEnter确认保存。
  • 验证任务:输入crontab -l查看当前用户的cron任务列表。

3. Systemd服务(系统级自动执行)

Systemd是Ubuntu的系统和服务管理器,适合需要开机自启按时间间隔重复执行依赖其他服务的脚本(如数据库备份、服务监控)。

  • 创建服务文件:用文本编辑器创建服务文件(如sudo nano /etc/systemd/system/myscript.service),内容如下:
    [Unit] Description=My Custom Script After=network.target # 可选:指定服务依赖(如网络就绪后启动) [Service] ExecStart=/home/user/script.sh # 脚本路径 Restart=always # 脚本异常退出时自动重启 User=user # 运行脚本的用户(避免权限问题) [Install] WantedBy=multi-user.target # 系统多用户模式启动 
  • 启用并启动服务
    sudo systemctl enable myscript.service(设置开机自启);
    sudo systemctl start myscript.service(立即启动服务)。
  • 查看服务状态sudo systemctl status myscript.service(确认服务是否运行正常)。

4. Inotifywait事件驱动触发(文件/目录变化时执行)

Inotifywait是inotify-tools包提供的工具,适合文件或目录发生变化时自动触发脚本(如新增文件时上传、修改配置文件时重启服务)。

  • 安装inotify-tools:在终端输入sudo apt-get install inotify-tools
  • 监控并触发脚本:使用以下命令监控指定目录(如/home/user/documents),当有文件创建、修改或删除时执行脚本:
    inotifywait -m /home/user/documents -e create,modify,delete --format '%w%f' | while read file; do /home/user/script.sh "$file"; done
    -m表示持续监控,-e指定监控的事件类型,--format设置输出格式)。

5. 图形界面触发器(桌面环境自动启动)

若使用Ubuntu的图形界面(如GNOME、KDE),可通过启动应用程序功能实现用户登录时自动执行脚本。

  • 创建.desktop文件:在~/.config/autostart/目录下创建以.desktop结尾的文件(如nano ~/.config/autostart/myscript.desktop),内容如下:
    [Desktop Entry] Type=Application Name=My Script Exec=/home/user/script.sh Terminal=false # 是否显示终端窗口(false为隐藏) 
  • 赋予执行权限chmod +x ~/.config/autostart/myscript.desktop
  • 效果:用户下次登录时,脚本会自动在后台运行。

0