我有一个crontab无法运行的代码
我正在使用./filename.sh来运行它。当我手动执行此操作时,运行正常
但是当我尝试时通过cron
for ((i=0; i<retries; i++)); do
curl -1 --cipher ALL --connect-timeout 90 -T $zip_name ftps://ftp.box.com/Backup/$zip_name --user admin:pas [[ $? -eq 0 ]] && break
echo "something went wrong, let's wait 6 seconds and retry"
sleep 6
done
[[ $retries -eq i ]] && { echo "This email is being sent as a notifer of Failure, Support" | mail -s "Dump Failed" "asdfas4@gmail.com" ; exit 1; }
这不起作用
Syntax error: Bad for loop variable
当我使用sh
运行时它说public List<int> MyMethod()
{
...
try
{
//add elements to list
}
catch(Exception e)
{
Error.WriteLine("Element cannot be negative, but other elements are ok");
}
...
}
[TestMethod]
public void TestWithNegatives()
{
try
{
List<int> list = MyMethod();
//there is a negative int in list, so there'll be an error message
}
catch (Exception e)
{
//Can I check here the error message, if there isn't exception thrown in mymethod?
}
}
答案 0 :(得分:3)
据推测,cron
的外壳是dash
(不是bash
)。在Ubuntu(和派生词)sh
只是dash
的符号链接。
你可以:
在您的脚本顶部添加一个shebang - #!/bin/bash
(或#!/usr/bin/env bash
),推荐方法
将脚本作为参数运行到bash
:/bin/bash /path/to/script.sh
,适度推荐
在SHELL=/bin/bash
(不推荐)中设置crontab
,甚至可以将SHELL
设置为bash
运行任何一个命令,但再次使用shebang方法
此外,请始终尝试使用绝对路径指向crontab
中的任何文件,并cron
以修改后的PATH
运行。
现在,即使在bash
中,您的for
构造的语法也不正确,您需要算术运算符(())
,而不是子shell(()
):
for ((i=0; i<retries; i++)); do ...; done
答案 1 :(得分:0)
如果您通过.
运算符来源脚本,则会忽略脚本中的shebang #!/bin/bash
。该脚本在你的cron的shell中执行,它不是bash,它不支持你正在使用的循环。
在脚本中添加shebang并从cron文件中删除.
:
*/5 * * * * /home/ubuntu/filename.sh >> /filename.sh
或者只是按以下方式编辑cron文件:
*/5 * * * * /bin/bash /home/ubuntu/filename.sh >> /filename.sh
答案 2 :(得分:0)
不要使用。当您提供脚本的完整路径时,请尝试运行以下命令:
*/5 * * * * /home/ubuntu/filename.sh
它应该有效,如果有更多细节,请告诉我。