Ubuntu 18.04.1
我有一系列脚本,用于将文件从我电脑上的位置备份到我的网络存储上的位置。
似乎没有任何命令需要 sudo(我可以以用户身份运行它们)。
无需root即可访问所有位置和文件。
所有脚本都存储在 ~/.local/bin 中
我设置了一个每日 cron 任务来按顺序运行这些脚本。当脚本由 cron 而不是我手动运行时,我发现脚本的某些元素不会发生。
例子:
#!/bin/bash
# use "if test -e" to detect whether a file on the networked drive is online:
if test -e /network-drive/online-test
# if the file is detected, run the backup job. otherwise display an error:
then
echo "network drive is online - proceeding with backup" # useful if running from command line
# backup job syntax:
rsync /pc-location/ /network-drive-location/ # rsync command also writes to a log file
else
# error message:
notify-send --expire-time=6000 'network drive is not online' 'BACKUP FAILED' # displays a pop up error message
aplay -q /usr/share/sounds/sound-icons/cembalo-12.wav # plays a sound
echo "network drive is not online - BACKUP FAILED" # useful if run from command line
echo "network drive was not online - BACKUP FAILED" > /folder/on/pc/dated-logfile
# set error exit status so subsequent jobs don't run if && is used:
exit 1
fi
我有大约 7 个这样的脚本(我们称之为脚本 1、脚本 2 等),它们在 PC 和网络驱动器上的不同位置进行备份。
如果从命令行触发,它们可以正常运行。在测试中,如果网络驱动器处于离线状态,则会弹出错误消息,播放声音,并写入日志文件,告诉我驱动器处于离线状态。
我有一个 cronjob(添加crontab -e) 写如下:
00 16 * * * /home/user/.local/bin/script-1 && /home/user/.local/bin/script-2 && /home/user/.local/bin/script-3 && /home/user/.local/bin/script-4 && /home/user/.local/bin/script-5 && /home/user/.local/bin/script-6 && /home/user/.local/bin/script-7
因此,每天 16:00,如果 PC 处于开启状态,cron 就会运行 script1。
如果驱动器在线,则一切正常,并继续执行脚本 2-7。如果一个脚本有效,则所有脚本都有效。
如果驱动器处于离线状态,则应该运行脚本 1 中的 else 命令 - 一条错误消息、一个声音、一个日志文件,然后作业应该因为退出状态而结束,并且不会尝试运行脚本 2-7。
但是我注意到脚本的其他部分中的一个或多个命令没有发生。
最值得注意的是 - 如果网络驱动器处于离线状态,则当脚本由 cron 运行时,notify-send 命令不会弹出错误消息。
有时没有播放声音。
始终会有一个写入的日志文件。
这种不一致的可能原因是什么?