为什么脚本元素不由 cron 运行?

为什么脚本元素不由 cron 运行?

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 命令不会弹出错误消息。

有时没有播放声音。

始终会有一个写入的日志文件。

这种不一致的可能原因是什么?

相关内容