ubuntu 下执行定时任务
Window shell文件在linux系统下执行不了的解决办法
一些人喜欢用vim来写linux shell script, 但是, 有的人喜欢在Windows下用一些方便的编辑器(比如鼎鼎大名的Notepad++)写好, 然后拷贝文件到linux下, 结果呢, 在执行脚本a.sh的时候, 会出现如下问题:
[taoge@localhost learn_shell]$ ./a.sh
bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory
[taoge@localhost learn_shell]$
什么原因呢, 我们有理由怀疑是文件格式问题? 我们用vim a.sh进入a.sh这个文件, 然后在底部模式下, 执行:set ff查看一下, 结果发现fileformat=dos, 看看, 果然是文件格式问题, 那怎么解决呢?
方法一:vim a.sh进入a.sh后, 在底部模式下, 执行:set fileformat=unix后执行:x或者:wq保存修改。 然后就可以执行./a.sh运行脚本了。(我亲自试过, 是ok的)
方法二:直接执行sed -i "s/\r//" a.sh来转化, 然后就可以执行./a.sh运行脚本了。(我亲自试过, 是ok的)
方法三:直接执行dos2unix a.sh来转化, 然后就可以执行./a.sh运行脚本了。(我的linux上执行dos2unix ./a.sh失败, 但是不要放弃啊, 加个busybox就可以了), 如下:
dos2unix a.sh
bash: dos2unix: command not found
[taoge@localhost learn_shell]$ busybox dos2unix a.sh
[taoge@localhost learn_shell]$
实际上, 经过上述三种方法修改后, 我们都可以再用:set ff再查一下, 发现a.sh的fileformat果然是unix了。 第三种方法最方便, 建议用第三种!
执行定时任务的步骤(使用crontab,让linux定时执行shell脚本)
使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行
入门
# crontab –e
这样可以已编辑模式打开个人的crontab配置文件,然后加入一下这行:
0 0 * * * /home/linrui/XXXXXXXX.sh
这将会在每天凌晨运行 指定的.sh文件
Cron 各项的描述
以下是 crontab 文件的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
o minute: 区间为 0 – 59
o hour: 区间为0 – 23
o day-of-month: 区间为0 – 31
o month: 区间为1 – 12. 1 是1月. 12是12月.
o Day-of-week: 区间为0 – 7. 周日可以是0或7.
Crontab 示例
1、在 凌晨00:01运行
1 0 * * * /home/linrui/XXXX.sh
2、每个工作日23:59都进行备份作业。
59 11 * * 1,2,3,4,5 /home/linrui/XXXX.sh
或者如下写法:
59 11 * * 1-5 /home/linrui/XXXX.sh
3、每分钟运行一次命令
*/1 * * * * /home/linrui/XXXX.sh
4、每个月的1号 14:10 运行
10 14 1 * * /home/linrui/XXXX.sh
Crontab命令的选项
以下是 crontab 的有效选项:
crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
ThinkPHP实现定时任务
项目服务端框架我选用的是ThinkPHP,由于策划案中有需求要定时刷新指定数据,所以在windows平台我使用微软的计划任务调用bat脚本来执行下面的命令来完成
php index.php /Home/cli
即使用PHP的CLI模式调用ThinkPHP的入口文件,然后再传入指定控制器完成相应的数据处理。/Home/cli 为我新增的名为CliController的控制器,在类中index方法调用相应处理数据的模块即可。特别注意:在windows平台上执行时在bat脚本中一定要先将当前执行目录切换到index.php所在目录,然后执行php.exe index.php /Home/cli.
在linux平台下使用的crontab来实现定时任务,通过crontab -e 新增一条命令,具体写法可问问度娘,给出我的配置截图:
# m h dom mon dow command
* * */bin/sh /mnt/share/Web/Cli_timer.sh
效果就是每天早上6点执行cli_timer.sh脚本,脚本内容如下:
sh -c "cd /mnt/share/WebServer;php index.php /Home/Cli;"
这里需要说明的是在linux下如果cli_timer.sh脚本中只包含下面命令
php index.php /Home/Cli;
是会报路径包含错误的,所以这里在脚本中将当前工作路径切换到index.php脚本放置的目录,这样就能正常使用了。
ubuntu上使用cron执行定时任务计划
在ubuntu下,cron为自带的系统服务。
任意用户下,输入“crontab -e”即可进入任务编写。相关提示大致如下:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at a.m every week with:
# * * tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab() and cron()
#
# m h dom mon dow command
如果是第一次执行“crontab -e”,会提示选择编辑器,选择合适的编辑器即可。我选择的是“4”,vim。
Select an editor. To change later, run 'select-editor'.
. /bin/ed
. /bin/nano <---- easiest
. /usr/bin/vim.basic
. /usr/bin/vim.tiny Choose - []:
然后,在最后面添加下面内容,然后保存并退出。
# test
* * * * date >>/tmp/test.txt
至于上面这个表达式的说明,请各看官自行度娘或谷歌。
好了,去看看“/tmp/test.txt”是否有内容吧。
下面是我期间遇到的几个问题。
1.输入“crontab -e”,提示“no crontab for root - using an empty one”
处理:这个是正常的,提示你,当前设定的用户,没有cron任务。
2.输入“crontab -e”,输入内容后,退出时,提示保存;保存后,任务不能成功添加。
处理:你选择的编辑器有问题。请在root角色下输入“select-editor”,可以重新进行选择。
3.编辑完任务并保存后,重启服务的问题。
有些网文说是“service crond restart”进行服务重启,在这里,需要特别注意的是,在ubuntu下cron服务的重启应该是“service cron restart ”。注意,是“cron”,而不是“crond”。
Ubuntu使用crontab定时任务
因为今天想定时执行postgres的一些脚本,所以在网上查一下有一个crontab的命令,就把这个命令的使用记录一下,方便日后查找.
cron是一个[守护程序]用于在指定的时间内执行行程类的任务,每一个用户都有一个 crontab 文件,来允许他们指定需要执行的内容和时间,此外,系统也有一个 crontab ,用来允许像交替日志和更新本地数据这样有规则的任务。
环境:Ubuntn 12.10
1.使用 crontab -e命令
这个命令比较简单直接输入就可以
#:crontab -e
出现如下窗口(第一次会提示你用那个编译器,随便选 一个就行了)
之后就可以输入你想执行的内容了.
比如:*/2 * * * * date >> /home/postgres/time.log 它的意思就是每过两分钟就向time.log文件中写入当然的系统时间.
之后ctrl+X退出保存就行了.
2.保存crontab之后,我们还要重启crontab服务来使这个任务生效.
sudo service cron restart
3.看一下结果
vim /home/postgres/time.log
参数说明(我找的很多例子,看看就明白了.)
# m h dom mon dow command
m 分钟 0-59
h 小时 0-23
dow 天1-31
mon 月 1-12
dow 星期 1-6 0表示星期天
command 就是要执行的命令
********************************************
ubuntu 使用sh 无法执行脚本文件的解决方法
最近刚开始学习linux shell语言
看的是鸟哥的私房菜,里面有讲到执行shell脚本有两种方法:
1. 设置执行属性: chmod 755 file
执行(如果已经在当前目录) : ./file
2. 使用: sh file 执行
.但是在vmware里装的ubuntu 11.10却无法执行
#!/bin/bash
declare -i s
for (( i = ; i <= ;i = i+ ))
do
s=s+i
done
echo "The count is ==> $s"
使用第二种方法执行时出现 :
test04_for.sh: 1: declare: not found
test04_for.sh: 3: Syntax error: Bad for loop variable
百度了下网上,解决方法:
在终端中输入:
sudo dpkg-reconfigure dash
然后出现的界面中选择 NO
然后就能正确运行了。
**********************************************
Crontab中的除号(slash)到底怎么用?
ubuntu 下执行定时任务的更多相关文章
- yii2在ubuntu下执行定时任务
一.编辑yii console/controllers TestController.php 二./usr/ 包括与系统用户直接有关的文件和目录创建sh_scripts目录,/usr/sh_scrip ...
- Ubuntu下执行mysql的sql文件
Ubuntu下执行mysql的.sql文件 方法一: 1.执行此命令,会提示输入mysql的root账户的密码,验证成功后,会在dbname这个数据库中执行filename.sql这个脚本,其中f ...
- ubuntu下执行ulimit返回“不允许的操作”,问题解决思路
在ubuntu下执行ulimit,希望修改允许的最大打开文件数,但返回“不允许的操作”. 使用ulimit -a查看当前配置 core file size (blocks, -c) 0 data se ...
- laravel中ubuntu下执行php artisan migrate总是报错
ubuntu14.0 + xampp + laravel5下 laravel中ubuntu下执行php artisan migrate总是报错: [PDOException] could not fi ...
- ubuntu中执行定时任务crontab
今天研究了下ubuntu里的crontab内置指令.这是设置定时执行脚本任务的指令,我先测试了下最基础的执行. 第一次使用crontab 时,会出现 no crontab for root - usi ...
- Ubuntu下添加定时任务执行php文件
//添加自动下载定时任务1. vim /etc/crontab2. 添加 #每5分钟执行一次*/5 * * * * root /usr/bin/php /home/wwwroot/123.php3. ...
- 【Ubuntu】执行定时任务(cron)
1.打开定时任务配置文件 crontab -e 2.编写定时任务时间 命令和脚本例如: /3 * * * * /soft/config/test.sh 前5个字段为时间,后面的一个为命令 前5个含义为 ...
- ubuntu下创建定时任务的两种方式及常见问题解决方案
创建定时任务的目的就是摆脱人为对程序重复性地运行. 0. 首先用下面的指令检查你是否安装crontab, crontab -l 如果本身就有的话,那么出现如下指令 LC_CTYPE="zh_ ...
- Windows Server 2016 下执行定时任务(英文系统)
Step1. 找到“控制面板(Control Panel)” 打开 “管理工具(Administrative Tools)” Step2. 打开“任务计划(Task Schedule)” Step3. ...
随机推荐
- easy-ui curd方法
/** _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : ...
- 使用import取代require
首先,Module 语法是 JavaScript 模块的标准写法,坚持使用这种写法.使用import取代require. // bad const moduleA = require('moduleA ...
- 关于ASP.NET中Request.QueryString的乱码问题(转)
转自 http://www.cnblogs.com/chinhr/archive/2008/09/23/1296582.html 今天在使用Request.QueryString的时候,发现所有接收到 ...
- -webkit-transition -moz-transition transition
-webkit-transition -moz-transition transition 可以定义动画的变化时间曲线-webkit-transition-timing-function: ease ...
- Elasticsearch 学习之提升性能小贴士
小贴士1:规划索引.分片 以及集群增长情况 ES使得创建大量索引和超大量分片非常地容易,但更重要的是理解每个索引和分片都是一笔开销.如果拥有太多的索引或分片,单单是管理负荷就会影响到ES集群的性能,潜 ...
- Elasticsearch学习之多种查询方式
1. query string search 搜索全部商品:GET /ecommerce/product/_search took:耗费了几毫秒 timed_out:是否超时,这里是没有 _shard ...
- LeetCode 35 Search Insert Position(查找插入位置)
题目链接: https://leetcode.com/problems/search-insert-position/?tab=Description 在给定的有序数组中插入一个目标数字,求出插入 ...
- 理解proc目录与linux进程、ps命令、netstat命令的关系
零.proc目录简介 proc目录是虚拟文件系统(VFS)的一种实现,保存了进程信息(pid目录)和一些系统信息. 一.系统的信息 1.cpuinfo和meminfo两个文件 查看CPU和内存相关信息 ...
- sonarqube插件开发(二) 开发插件
一.环境准备 java 1.8, maven 3.1 检查自己的环境是否支持 sonarqube的插件开发 java -version mvn -version 二.创建maven项目 pom.xml ...
- 【咸鱼教程】Egret可长按识别二维码(精确位置和大小)
教程目录一 实现原理二 实现过程三 Demo下载 本教程是在Egret中实现长按识别的二维码,并可以精确定位二维码的位置和大小,支持横屏和竖屏. 一 实现原理 微信中长按识别二维码,需要长按jpg或p ...