Bash 为什么我的cron作业没有正确执行?

Bash 为什么我的cron作业没有正确执行?,bash,macos,unix,Bash,Macos,Unix,我有一个这样写的shell脚本: #!/bin/bash cd Documents/Hi_tech_team_10/ chmod +x /Users/twoodwa/Documents/Hi_tech_team_10/test.rb ruby test.rb 当我在终端中执行它时,它工作得很好,但是当我通过 crontab -e 然后使用编辑和保存文件 */10 * * * * /Users/twoodwa/Documents/Hi_tech_team_10/test.sh 该脚本要么不执

我有一个这样写的shell脚本:

#!/bin/bash
cd Documents/Hi_tech_team_10/
chmod +x /Users/twoodwa/Documents/Hi_tech_team_10/test.rb
ruby test.rb
当我在终端中执行它时,它工作得很好,但是当我通过

crontab -e
然后使用编辑和保存文件

*/10 * * * * /Users/twoodwa/Documents/Hi_tech_team_10/test.sh
该脚本要么不执行,要么正在执行与从终端运行脚本不同的操作

问题是什么

编辑:我已将脚本更改为使用绝对路径,但仍然不起作用:

#!/bin/bash
chmod +x /Users/twoodwa/Documents/Hi_tech_team_10/test.rb
ruby /Users/twoodwa/Documents/Hi_tech_team_10/test.rb

第一个检查点:如果脚本是可执行的

第二个检查点:您应该使用绝对路径

第三个检查点:永远不要信任环境。Cron有自己的环境(正确,在评论中建议)


好主意:在终端/文件中添加一些日志记录,以检查执行情况以及失败的时间。

第一个检查点:脚本是否可执行

第二个检查点:您应该使用绝对路径

第三个检查点:永远不要信任环境。Cron有自己的环境(正确,在评论中建议)



好主意:在终端/文件中添加一些日志记录,以检查执行情况以及失败的时间。

问题在crontab中,将crontab更改为指向测试。rb

问题在crontab中,将crontab更改为指向test.rb

脚本在终端中运行时工作正常,如下所示:
sh/Users/twoodwa/Documents/Hi\u tech\u team\u 10/test.sh
所以我认为它应该对cron作业执行相同的操作,对吗?@TraversWoodward cron作业不执行你的.profile或.bashrc,因此,如果脚本依赖于那里的任何内容,它将无法从cron.Add
~/cron.out 2>&1
到cron作业的末尾,这样错误消息将被放在您的
~/cron.out
文件中。@Barmar您是说因为脚本在我的用户配置文件的目录中,所以它无法工作?如果是这样的话,将test.rb和test.sh移动到另一个目录会解决问题吗?@TraversWoodward我从来没有说过任何关于目录的事情。如果ruby脚本依赖于您在shell启动脚本中设置的环境变量,它不起作用,因为当你运行cron作业时,它们不会被设置。当在终端中运行时,脚本工作得非常完美,就像这样:
sh/Users/twoodwa/Documents/Hi_tech_team_10/test.sh
所以我认为它应该对cron作业做同样的事情,对吗?@TraversWoodward cron作业不执行你的.profile或.bashrc,因此,如果脚本依赖于那里的任何内容,它将无法从cron.Add
~/cron.out 2>&1
到cron作业的末尾,这样错误消息将被放在您的
~/cron.out
文件中。@Barmar您是说因为脚本在我的用户配置文件的目录中,所以它无法工作?如果是这样的话,将test.rb和test.sh移动到另一个目录会解决问题吗?@TraversWoodward我从来没有说过任何关于目录的事情。如果ruby脚本依赖于您在shell启动脚本中设置的环境变量,那么它将不起作用,因为在运行cron作业时不会设置这些变量。只有在文档上方的目录中运行脚本时,cd文档才会起作用。用于编程问题,而不是关于使用或配置Linux及其应用程序的问题。在Mac OS上,您通常应该使用launchd而不是cron,尽管创建launchd plist比cron作业更复杂。@Barmar如果有必要,我会使用它,但是我更愿意理解为什么cron作业不能正常工作。您不需要
chmod+x test.rb
。只有在文档上方的目录中运行脚本,cd文档才能工作。用于编程问题,而不是关于使用或配置Linux及其应用程序的问题。或者是回答类似问题的更好地方。在Mac OS上,您通常应该使用launchd而不是cron,尽管创建launchd plist比cron作业更复杂。@Barmar如果有必要,我会使用它,但我更愿意理解为什么cron作业不能正常工作。您不需要
chmod+x test.rb
。不,他想运行运行test.rb的shell脚本。不,他想运行运行test.rb的shell脚本。