我有一个非常简单的shell脚本,我需要作为cronjob运行,但我甚至无法运行测试脚本。这是和示例脚本:
/home/myUser/scripts/test.sh
#!/bin/bash
touch file.txt
的crontab:
* * * * * /home/myUser/scripts/test.sh
脚本从终端运行良好但无法让它作为cronjob运行。到目前为止,我已经在crontab中尝试了这些:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /bin/bash /home/myUser/scripts/test.sh
这在脚本文件中:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts
从我收集的内容来看,解决方案可能在PATH变量中,但我无法弄清楚它是什么,因为我的理解在这一点上非常有限。所以我的问题是,如何让我的脚本作为cronjobs运行?
编辑:该文件具有所有用户的rwx权限。这仅用于测试目的。
编辑 cronjobs,例如* * * * * touch /home/myUser/scripts/test.txt
,但它不会运行脚本。
答案 0 :(得分:10)
最简单的方法是使用GUI:
对于Gnome,请使用 gnome-schedule(Universe)
sudo apt-get install gnome-schedule
对于KDE,请使用 kde-config-cron
It should be pre installed on Kubuntu
但是如果你使用无头linux或者不想要GUI,你可以使用:
crontab -e
如果您将其输入终端,您将获得一张桌子 你现在必须插入你的cronjobs 格式化这样的工作:
* * * * * YOURCOMMAND
- - - - -
| | | | |
| | | | +----- Day in Week (0 to 7) (Sunday is 0 and 7)
| | | +------- Month (1 to 12)
| | +--------- Day in Month (1 to 31)
| +----------- Hour (0 to 23)
+------------- Minute (0 to 59)
也有一些短片(如果你不想要*):
@reboot --> only once at startup
@daily ---> once a day
@midnight --> once a day at midnight
@hourly --> once a hour
@weekly --> once a week
@monthly --> once a month
@annually --> once a year
@yearly --> once a year
如果你想将短裤用作cron(因为它们不起作用):
@daily --> 0 0 * * *
@midnight --> 0 0 * * *
@hourly --> 0 * * * *
@weekly --> 0 0 * * 0
@monthly --> 0 0 1 * *
@annually --> 0 0 1 1 *
@yearly --> 0 0 1 1 *
答案 1 :(得分:9)
file.txt在哪个目录中? cron在您的主目录中运行作业,因此除非您的脚本cd
位于其他地方,否则它将寻找/创建file.txt。
编辑:当您在shell中引用文件而未指定其完整路径(例如file.txt
而不是完整路径/home/myUser/scripts/file.txt
)时,您所指的是您所指的文件您当前的工作目录。当您运行脚本时(无论是交互式还是通过crontab),脚本的工作目录与脚本本身的位置无关;相反,它继承自运行脚本的任何内容。
因此,如果您cd
(更改工作目录)到脚本所在的目录然后运行它,file.txt
将引用与脚本相同的目录中的文件。但是如果你先没有cd
,那么file.txt
将引用你在运行脚本时遇到的任何目录中的文件。例如,如果您的主目录是/ home / myUser,并且您打开一个新shell并立即运行该脚本(scripts/test.sh
或/home/myUser/scripts/test.sh
; ./test.sh
将无效),触摸文件/home/myUser/file.txt,因为/ home / myUser是你当前的工作目录(因此也就是脚本)。
当您从cron
运行脚本时,它的功能基本相同:它运行它,并将工作目录设置为您的主目录。因此,脚本中的所有文件引用都是相对于您的主目录进行的,除非脚本cd
位于其他位置或指定文件的绝对路径。
答案 2 :(得分:2)
尝试,
# cat test.sh
#!/bin/bash
/bin/touch file.txt
cron as:
* * * * * /bin/sh /home/myUser/scripts/test.sh
您可以通过以下方式确认:
# tailf /var/log/cron
答案 3 :(得分:0)
它也应该在cron上正常运行。请查看以下内容。
1-您正在编辑正确的文件来设置cron。
2-您已经给予脚本适当的权限(执行权限),这意味着您的脚本是可执行的。
答案 4 :(得分:0)
指定完整路径并为scriptfile授予适当的权限。我尝试按照脚本文件运行cron:
#!/bin/bash
/bin/mkdir /scratch/ofsaaweb/CHEF_FICHOME/ficdb/bin/crondir
crontab命令是
* * * * * /bin/bash /scratch/ofsaaweb/CHEF_FICHOME/ficdb/bin/test.sh
它对我有用。