【问题标题】:Shell script runs fine from command line, but not in root cronShell 脚本从命令行运行良好,但不能在根 cron 中运行
【发布时间】:2014-04-15 19:02:36
【问题描述】:

我不知道为什么这个脚本不起作用。该脚本已成为可执行文件,我在邮件或我设置用于捕获任何内容的 snap.log 中没有得到任何输出。我在命令行上以 root 身份运行,它运行良好,但是一旦它被添加到 cron 中,什么也没有发生。我完全被难住了,任何帮助将不胜感激。谢谢。

在 OS X Mavericks 上运行。

#!/bin/bash

# Ignores white space in directory names
IFS=$'\n'

# Sets all variables needed
export DLY_BKP=/Volumes/BKP/Daily_bkp.`/bin/date +%m%d%y`
export DLY_LOG=AAAdaily_bkp.txt
export BKP_DIR=/Users/Backup_logs
export VMPATH=/Applications/VMware\ Fusion.app/Contents/Library


#####################################################

# Finds all running VMs
$VMPATH/vmrun list | /usr/bin/sed 1d > $DLY_BKP/$DLY_LOG

# Creates snapshots of all running VMs on the server
while read vm; do
    $VMPATH/vmrun -T ws snapshot $vm "snapshot `/bin/date +%m/%d/%Y`"
    $VMPATH/vmrun -T ws deleteSnapshot $vm "snapshot `/bin/date -v-2d +%m/%d/%Y`"
done < $DLY_BKP/$DLY_LOG > $DLY_BKP/snap.log 2>&1

【问题讨论】:

  • 有可能cron 正在使用sh 而不是bash 执行脚本。
  • 看起来在作业应该运行时甚至没有创建 snap.log。有什么会导致它不执行吗?现在我正在使用 $ +1 /path/to/script/script.sh
  • shebang 行不强制它使用 bash 吗?
  • 循环后有一个2&gt;&amp;1,但$VMPATH/vmrun list ... 行上没有。尝试将2&gt;&amp;1 附加到该行。也许它在进入循环之前就已经死了。
  • @nickg 取决于 cron 作业的设置方式。但依赖它是不安全的。

标签: bash shell cron osx-mavericks vmware-fusion


【解决方案1】:

为 CRON 使用设置脚本通常需要通过 crontab 设置或在脚本本身中添加路径。尝试将显式 PATH 添加到您的 crontab 或脚本中。

Crontab 条目因操作系统而异,因此请检查您的文档 - 对于免费 BSD,它们类似于“crontab -e”并编辑条目(有关您的操作系统的详细信息,请参阅“man crontab”或“man -a crontab”):

PATH=/some_custom_path # affect all JOBs in Crontab

 ### MM HH Day Month WEEk_Day << Order VARIES by OS!  
 ## run on 2nd/4th/6th days of week  
19 9 * * 2,4,6  /home/user/bin/some_script  

扔掉所有输出:

19 9 * * 2,4,6  /home/user/bin/some_script > /dev/null 2>&1  

将所有数据发送到您指定的日志文件:

19 9 * * 2,4,6  /home/user/bin/some_script > /tmp/cron_job.log 2>&1  

邮件结果和错误

19 9 * * 2,4,6  /home/user/bin/some_script 2>&1 | mail -s "Cron results" user@your_dom.com 

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多