我需要一些建议,因为我的 Fedora 8 盒子上的 Cron 让我抓狂。
我有一个存储在的基本脚本
/tmp/myscript.sh
这是该脚本中的代码副本。
#!/bin/bash
AFolderName="archivefolder"
AFileName="archive.zip"
echo "setting variables"
if [ -d $AFolderName ]
then
rm -r $AFolderName
fi
echo "checked if folder exists"
mkdir $AFolderName
cd $AFolderName
echo "about to zip"
zip -r $(date +%Y%m%d)_$AFileName /var/www/*
echo "zipped"
echo "about to s3"
s3cmd put $(date +%Y%m%d)_$AFileName s3://mytestbucket
echo "s3ed"
cd ..
rm -r $AFolderName
echo "done"
我已经完成 crontab -e 并根据其格式添加了一个作业,并且当我在临时文件夹中获取日志文件时,该作业似乎正在运行。但是日志文件中没有任何内容,也没有任何内容上传到亚马逊......
以下是 crontab 中的内容
*/10 * * * * root /tmp/myscript.sh > /tmp/ms.log
我做错了什么?没有任何地方提示问题是什么。顺便说一下,该脚本必须以 root 身份运行。
答案1
同意您需要以 root 身份登录或$ sudo su
真正成为 root,然后执行您的操作# crontab -e
并从 crontab 行中删除“root”——因为看起来您发现它不喜欢。
然后您就可以以 root 身份运行您的脚本 — — 就像您已经拥有它一样。
答案2
您确定该文件的执行标志已翻转吗(ls -l /tmp/myscript.sh
)并且 /tmp 未挂载 noexecute?(mount
)shell 将创建空日志文件,这仅仅是由于重定向。但这并不意味着脚本实际上正在运行。而且由于您没有重定向错误输出,您将永远不会看到该消息。(虽然它可能已邮寄给 root 用户?)
除了上述方法之外,还有一些方法可以尝试:
A) 从命令行手动运行脚本。确保它确实能执行某些操作。B
) 您可能希望在脚本开始时导入配置文件。否则,您可能会遗漏脚本可能需要的路径和环境变量。C
) 将 cron 作业的错误输出重定向到同一个文件(2>&1
末尾带有),或者重定向到单独的文件(带有)2> diff_file.txt
。这可能会让您了解哪里出了问题。——
Christopher Karel
答案3
正确的做法是
这是该脚本中 s3cmd 行上需要 sudo 的代码副本。
#!/bin/bash
AFolderName="archivefolder"
AFileName="archive.zip"
echo "setting variables"
if [ -d $AFolderName ]
then
rm -r $AFolderName
fi
echo "checked if folder exists"
mkdir $AFolderName
cd $AFolderName
echo "about to zip"
zip -r $(date +%Y%m%d)_$AFileName /var/www/*
echo "zipped"
echo "about to s3"
sudo s3cmd put $(date +%Y%m%d)_$AFileName s3://mytestbucket
echo "s3ed"
cd ..
rm -r $AFolderName
echo "done"
crontab 需要删除 ROOT。
*/10 * * * * /tmp/myscript.sh > /tmp/ms.log