Crontab无法启动脚本

时间:2018-10-23 13:04:02

标签: linux ubuntu cron ubuntu-18.04

我试图每天在12点通过crontab运行以下脚本:

#!/bin/sh
mount -t nfs 10.1.25.7:gadal /mnt/NAS_DFG
echo >> ~/Documents/Crontab_logs/logs.txt
date >> ~/Documents/Crontab_logs/logs.txt
rsync -ar /home /mnt/NAS_DFG/ >> ~/Documents/Crontab_logs/logs.txt 2>&1
unmout /mnt/NAS_DFG

由于它需要在sudo中运行,因此我在'sudo crontab'中添加了以下代码:

someone@something:~$ sudo crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

0 12 * * * ~/Documents/Crontab_logs/Making_save.sh 

但是它没有运行。我提到只是执行脚本thourgh:

sudo ~/Documents/Crontab_logs/Making_save.sh

工作正常,除了在日志文件中未写入rsync命令的输出。

任何想法出了什么问题?我想我检查了错误的主要根源,即使用shell,在末尾留空行,等等...

1 个答案:

答案 0 :(得分:1)

sudo crontab创建的作业在root的crontab中用完(如果您设法正确配置它,则root crontabs中的语法是不同的)。当cron运行作业时,$HOME(如果使用带波浪号扩展功能的Shell或脚本语言,则~将指向root等的主目录。

您可能应该简单地添加

0 12 * * * sudo ./Documents/Crontab_logs/Making_save.sh
改成您自己的crontab

请注意,crontab根本没有波浪线扩展名(但是我们可以依靠cron将始终用尽您的主目录这一事实)。

...尽管这仍然会出现问题,因为如果脚本在sudo下运行并创建了新文件,则这些文件将归root所有,并且您的常规用户无法更改帐户。更好的解决方案是仅使用mount运行实际的umountsudo命令,并最小化在特权帐户上运行的代码量,即删除sudo从您的crontab中删除,而是将其添加到脚本中到需要它的各个命令中。