Linux Crontab 实现秒级定时任务及普通用户运行crontab

crontab.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
PHP_BIN=/alidata/server/php/bin/php
BASE_PATH=/alidata/www/symfony/bin/

cd ${BASE_PATH}

umask 002

${PHP_BIN} \
-d date.timezone=Asia/Shanghai \
-d mbstring.http_input=UTF-8 \
-d mbstring.http_output=UTF-8 \
-d mbstring.internal_encoding=UTF-8 \
-d default_charset=UTF-8 \
-d magic_quotes_gpc=off \
-d magic_quotes_runtime=off \
crontab.php

crontab.php

1
2
<?php
file_put_contents('./crontab.txt', date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);

推荐使用第一种方式,若对时间精确度要求不高可以使用第二种方式

第一种方式:创建多个定时任务

1
2
3
4
5
6
7
8
9
10
11
12
13
#crontab 添加任务
*/1 * * * * /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 5 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 10 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 15 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 20 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 25 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 30 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 35 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 40 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 45 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 50 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
*/1 * * * * sleep 55 && /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1

第二种方式:Shell 循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#contab 添加任务,每分钟执行一次
crontab -e
*/1 * * * * /alidata/www/symfony/bin/crontab.sh >/dev/null 2>&1
#修改crontab.sh
step=5
for ((i = 0; i < 60; i = (i + step)))
do
${PHP_BIN} \
-d date.timezone=Asia/Shanghai \
-d mbstring.http_input=UTF-8 \
-d mbstring.http_output=UTF-8 \
-d mbstring.internal_encoding=UTF-8 \
-d default_charset=UTF-8 \
-d magic_quotes_gpc=off \
-d magic_quotes_runtime=off \
crontab.php
sleep $step
done

普通用户运行crontab

1
2
3
4
5
6
7
8
9
10
11
#指定www用户主目录,必须有效,用户是否能登录不重要
vi /etc/passwd
www:x:1000:1000::/alidata/www:/sbin/nologin
#搜索下sh执行程序路径,这里路径是 /usr/bin/sh
[root@localhost bin]# whereis sh
sh: /usr/bin/sh /usr/share/man/man1/sh.1.gz
#添加定时任务,指定为www用户添加定时任务
crontab -e -u www
*/1 * * * * /usr/bin/sh /alidata/www/symfony/bin/crontab.sh
#重启服务
service crond restart

crontab 常用命令

1
2
3
4
5
6
7
8
9
10
#为指定用户添加定时任务
crontab -e -u 用户名
#查看指定用户的定时任务
crontab -l -u 用户名
#启动|停止|重启服务
service crond start|stop|restart
#查看定时任务执行情况
tail -f /var/log/cron
#定时任务生成的文件所在路径,可直接编辑
/var/spool/cron/用户名
0%