tom*_*ssi 18 bash shell cron crontab
我有一个非常简单的shell脚本,我需要作为cronjob运行,但我甚至无法运行测试脚本.这是和示例脚本:
/home/myUser/scripts/test.sh
#!/bin/bash
touch file.txt
Run Code Online (Sandbox Code Playgroud)
crontab中:
* * * * * /home/myUser/scripts/test.sh
Run Code Online (Sandbox Code Playgroud)
脚本从终端运行良好,但不能让它作为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
Run Code Online (Sandbox Code Playgroud)
这在脚本文件中:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts
Run Code Online (Sandbox Code Playgroud)
根据我收集的内容,解决方案可能在PATH变量中,但我无法弄清楚它是什么,因为我的理解在这一点上非常有限.所以我的问题是,如何让我的脚本作为cronjobs运行?
编辑:该文件具有所有用户的rwx权限.这仅用于测试目的.
编辑: cronjobs如* * * * * touch /home/myUser/scripts/test.txt工作,但它不会运行脚本.
sn0*_*n0w 12
最简单的方法是使用GUI:
对于Gnome使用gnome-schedule(宇宙)
sudo apt-get install gnome-schedule
Run Code Online (Sandbox Code Playgroud)
对于KDE,请使用kde-config-cron
It should be pre installed on Kubuntu
Run Code Online (Sandbox Code Playgroud)
但是如果你使用无头linux或者不想要GUI,你可以使用:
crontab -e
Run Code Online (Sandbox Code Playgroud)
如果你输入终端,你会得到一张桌子.
你现在必须插入你的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)
Run Code Online (Sandbox Code Playgroud)
也有一些短裤(如果你不想要*):
@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
Run Code Online (Sandbox Code Playgroud)
如果你想将短裤用作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 *
Run Code Online (Sandbox Code Playgroud)
Gor*_*son 11
file.txt在哪个目录中?cron在您的主目录中运行作业,因此除非您的脚本cd位于其他地方,否则它将在哪里查找/ create file.txt.
编辑:当您在shell中引用文件而未指定其完整路径(例如file.txt,而不是完整路径/home/myUser/scripts/file.txt)时,您将引用当前工作目录中的文件.当您运行脚本时(无论是交互式还是通过crontab),脚本的工作目录与脚本本身的位置无关; 相反,它继承自运行脚本的任何东西.
因此,如果您cd(更改工作目录)到脚本所在的目录然后运行它,file.txt将引用与脚本相同的目录中的文件.但是如果你不在cd那里,file.txt那么在你运行脚本时,会引用你正好在任何目录中的文件.举例来说,如果你的主目录是/ home/MYUSER,并打开一个新的外壳,立即运行脚本(scripts/test.sh或者/home/myUser/scripts/test.sh,./test.sh将无法正常工作),它会接触到文件/home/myUser/file.txt因为/ home/myUser是您当前的工作目录(因此也就是脚本).
从中运行脚本时cron,它基本上是相同的:它运行它,并将工作目录设置为主目录.因此,脚本中的所有文件引用都是相对于您的主目录进行的,除非脚本cd位于其他位置或指定文件的绝对路径.
尝试,
# cat test.sh
#!/bin/bash
/bin/touch file.txt
Run Code Online (Sandbox Code Playgroud)
cron 为:
* * * * * /bin/sh /home/myUser/scripts/test.sh
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式确认:
# tailf /var/log/cron
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113733 次 |
| 最近记录: |