我听说 crontab 是不错的选择,但我应该如何编写这行代码并将其放在服务器上的哪里呢?
这里有一个好的教程介绍了在Ubuntu上使用crontab是什么以及如何使用。你的crontab行应该看起来像这样:
00 00 * * * ruby path/to/your/script.rb
(00 00
表示午夜--0 分钟和 0 小时--而 *
意味着每个月的每一天.)
语法: mm hh dd mt wd command
mm 分钟 0-59 hh 小时 0-23 dd 月份的第几天 1-31 mt 月份 1-12 wd 周几 0-7 (星期日 = 0 或 7) command: 要运行的命令 所有数字值都可以用 * 替换,表示所有值
来自 man 手册页面
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
需要注意可以使用的特殊“昵称”(记录在man页面中),特别是“@reboot”,它没有时间和日期替代方案。
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
您也可以使用这个技巧来让您的 Cron 作业每分钟运行多次。
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
要添加一个cron任务,你可以选择以下三种方法之一:
像上面所示(来自crontab第5节man页面)将命令添加到用户的crontab中。
crontab -e -u <username>
作为root编辑用户的crontabcrontab -e
编辑当前用户的crontabEDITOR
环境变量设置编辑器
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
使脚本可执行创建一个cron作业的脚本/程序,并将其添加到系统的anacron /etc/cron.*ly
目录中
chmod a+x /etc/cron.daily/script_runs_daily.sh
--使其可执行man anacron
chmod a+x <file>
使脚本可执行/etc/crontab
或/etc/anacrontab
中被配置为在设定时间运行/etc/anacrontab
中定义此项,并在/etc/cron.d/0hourly
中定义cron.hourly或者,可以在/etc/cron.d
中创建系统crontables。
/etc/cron.d
目录中。/etc/cron.d
中的文件无需可执行。someuser
执行,并强制使用/bin/bash
作为shell。 File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
快速设置cron任务的指南
创建一个新的文本文件,例如:mycronjobs.txt
对于每个日常任务(00:00, 03:45),将计划行保存在mycronjobs.txt中。
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
crontab mycronjobs.txt
额外有用信息
查看当前的定时任务
crontab -l
删除所有定时任务
crontab -r
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
将其保存在一个文件中(我们将其命名为“every-day.sh”)。
sleep 1d - 意味着它等待一天然后再次运行。
现在给你的脚本授权。使用以下命令:-
chmod +x every-day.sh
现在,使用"nohup"在后台执行此shell脚本。 即使您从会话注销,它也将继续执行脚本。
使用以下命令执行脚本。
nohup ./every-day.sh &
注意:要在每天23:55运行“yourscript.sh”,必须在23:55准确执行“every-day.sh”脚本。
/etc/crontab
文件允许在命令之前添加用户列。但是,当你运行crontab -e
命令时,你正在编辑一个特定用户的crontab文件,该文件不允许添加用户列。据我所知,Ubuntu不鼓励手动退出/etc/crontab
文件,因为这样可能会被覆盖。详情请参见:https://dev59.com/n2oy5IYBdhLWcg3wieu6 - Jordan Runningsudo crotab -u root -e
。 - dashesy