crontab 执行定时任务失败

遇到的问题:需要通过pyspark执行跑脚本数据,由于数据比较多,因此要分成每天每天的跑,跑一次大概需要1个半小时。因此写了一个定时执行任务,如下所示:

08 13 * * * lechuan && cd /mnt/disk1/home/zhangh/howo_pere/code/explore_data && nohup sh submit.sh get_uid_num_conti.py 3  > log_0825_22 &
08 15 * * * lechuan && cd /mnt/disk1/home/zhangh/howo_pere/code/explore_data && nohup sh submit.sh get_uid_num_conti.py 2  > log_0825_23 &
08 17 * * * lechuan && cd /mnt/disk1/home/zhangh/howo_pere/code/explore_data && nohup sh submit.sh get_uid_num_conti.py 1  > log_0825_24 &

新中的想法是按照上面三行语句执行任务。可是在执行的时候总是只能生成最终的log文件'log_0825_24','log_0825_23','log_0825_22',而且log文件中是空的,况且在hdfs上并没有生成想要的文件。

但是在Linux下手动执行:

nohup sh submit.sh get_uid_num_conti.py 3  > log_0825_22 &

也是可以生成任务的,这个原因找了很久也没有找到。

只能用其他法子:

在explore_data目录下写一个execute.sh脚本,脚本的内容是:

sh submit.sh get_uid_num_conti.py 3  > log_0825_22 

sleep 2h

sh submit.sh get_uid_num_conti.py 2  > log_0825_23 

sleep 2h

sh submit.sh get_uid_num_conti.py 1  > log_0825_24 

然后执行该脚本:

nohup sh execute.sh &

就是想通过sleep命令来分开执行脚本。

后来发现这种sleep的方法太low了,有时候上个任务一个小时就跑完了,下面还在等待。shell有一个更加work的方法:wait

就是

wait是用来阻塞当前进程的执行,直至指定的子进程执行结束后,才继续执行。使用wait可以在bash脚本“多进程”执行模式下,起到一些特殊控制的作用。

代码更改如下:

sh submit.sh get_uid_num_conti.py 3  > log_0825_22 

wait
sleep 15s

sh submit.sh get_uid_num_conti.py 2  > log_0825_23 

wait
sleep 15s
sh submit.sh get_uid_num_conti.py 1  > log_0825_24 
 

 

 

你可能感兴趣的:(shell)