【问题标题】:Crontab not launching scriptcrontab 没有启动脚本
【发布时间】:2018-10-23 21:48:53
【问题描述】:

我正在尝试每天 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 

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

sudo ~/Documents/Crontab_logs/Making_save.sh

运行良好,只是没有将 rsync 命令的输出写入日志文件。

任何想法出了什么问题?我想我检查了错误的主要来源,即使用 shell,最后留下一个空行等等......

【问题讨论】:

  • 将此标记为迁移到 unix.stackexchange.com
  • ~ 从 cron 运行时可能无法正常工作。将其更改为绝对路径。如果您致力于不指定完整路径,则可以使用$HOME 变量代替~。请理解 $HOME 可能是 root 的家,而不是您的家,您的脚本可能仍然找不到。
  • 这有一个可疑的荣誉,几乎可以解决您可能遇到的所有问题。值得一提的是,Stack Overflow cron tag info page 提供了相当详尽的故障排除提示列表。

标签: linux ubuntu cron ubuntu-18.04


【解决方案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 所有,并且不能由您的常规用户帐户更改。更好的解决方案仍然是仅使用sudo 运行实际的mountumount 命令,并尽量减少在特权帐户上运行的代码量,即从crontab 中删除sudo 并改为添加它在脚本中添加到需要它的各个命令中。

【讨论】:

  • 感谢您的详细回答。因此,我需要将密码传递给 cron(如果我将 sudo 放入 crontabmountumount 命令?什么是最简单(但安全)的方法?
  • 如果您有权限,请将NOPASSWD: 添加到您的sudo 配置中的这些命令中。如果没有,限制权限的一种方法是重构脚本以要求 root 运行,但将非特权部分放入您的个人帐户,并使用 su(或 sudo)。
  • 我不知道我们可以为sudo 添加此类例外。非常感谢!
猜你喜欢
  • 2020-04-22
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多