方案一:使用 systemd 服务(推荐)
这是最可靠的方法,会在系统启动时以 root 权限自动执行:
-
创建复制脚本
sudo nano /usr/local/bin/copy_music.sh
内容:
#!/bin/bash # 清空 /tmp 目录并复制 Music 内容 rm -rf /tmp/* cp -rf /home/user/Music/* /tmp/ logger "Music 目录内容已复制到 /tmp/"
将
user
替换为您的实际用户名 -
设置脚本权限
sudo chmod +x /usr/local/bin/copy_music.sh
-
创建 systemd 服务文件
sudo nano /etc/systemd/system/copy-music.service
内容:
[Unit] Description=Copy Music to /tmp on boot After=network.target Requires=local-fs.target [Service] Type=oneshot ExecStart=/usr/local/bin/copy_music.sh [Install] WantedBy=multi-user.target
-
启用并启动服务
sudo systemctl daemon-reload sudo systemctl enable copy-music.service sudo systemctl start copy-music.service
-
验证服务状态
systemctl status copy-music.service journalctl -u copy-music.service # 查看日志
方案二:使用 cron 定时任务(@reboot)
适合不需要 root 权限的情况:
-
编辑当前用户的 cron 任务
crontab -e
-
添加启动任务
在文件末尾添加:@reboot sleep 10 && cp -rf /home/user/Music/* /tmp/
将
user
替换为您的实际用户名
sleep 10
确保系统完全启动后再执行
方案三:使用 rc.local(传统方法)
Ubuntu 20.04 默认禁用,需手动启用:
-
创建并启用 rc.local
sudo nano /etc/rc.local
内容:
#!/bin/bash cp -rf /home/user/Music/* /tmp/ exit 0
-
设置权限并启用服务
sudo chmod +x /etc/rc.local sudo systemctl enable rc-local.service
方案四:使用登录脚本(用户登录后执行)
如果希望用户登录后才执行:
- 创建 ~/.config/autostart 项目
内容:mkdir -p ~/.config/autostart nano ~/.config/autostart/copy-music.desktop
[Desktop Entry] Name=Copy Music to tmp Type=Application Exec=/bin/bash -c "sleep 5 && cp -rf $HOME/Music/* /tmp/"
验证和注意事项
-
验证方法:
# 重启后检查 ls /tmp # 检查日志(方案一) journalctl -u copy-music.service
-
重要注意事项:
/tmp
目录在每次重启时会被自动清空,这是正常行为- 如果 Music 目录很大,复制可能需要一些时间
- 确保源目录路径正确(检查用户名)
- 使用
ls -ld /home/user/Music
确认目录是否存在和权限 - 考虑在脚本中添加错误处理:
# 在脚本中添加 if [ ! -d "/home/user/Music" ]; then logger "错误:Music 目录不存在" exit 1 fi
推荐方案:对于系统级别的自动化任务,使用 systemd 服务(方案一) 是最可靠的选择,它能确保在任何用户登录前执行,且拥有必要的权限。
如果遇到权限问题(如 /tmp
空间不足),可以考虑添加磁盘空间检查:
# 在脚本中添加
MIN_SPACE=100 # 100MB 最小空间
AVAILABLE=$(df -m /tmp | awk 'NR==2{print $4}')
if [ "$AVAILABLE" -lt "$MIN_SPACE" ]; then
logger "警告:/tmp 空间不足 (可用: ${AVAILABLE}MB)"
exit 1
fi