打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux计划任务问题:shell文件可以手动执行,计划任务却一直失败!

1. 如果是sh脚本:

直接在脚本前面加上: source /etc/profile

2. 如果是python:

source /etc/profile && python /mypath/myscript.py ...

原因:crontab 不能自动从用户profile文件中读取环境变量参数。具体解释

如果没有生效,可以重启crontab服务,/etc/init.d/crond restart ; 参考网页

如果依然无法解决问题那么需要查看你的文件编码是否有问题:

在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。

  查看脚本文件是dos格式还是unix格式的几种办法。

(1)cat -A filename  从显示结果可以判断,dos格式的文件行尾为^M$,unix格式的文件行尾为$。

(2)od -t x1 filename 如果看到输出内容中存在0d 0a的字符,那么文件是dos格式,如果只有0a,则是unix格式。

(3)vi filename打开文件,执行 : set ff,如果文件为dos格式在显示为fileformat=dos,如果是unxi则显示为fileformat=unix。

  解决方法:

(1)使用linux命令dos2unix filename,直接把文件转换为unix格式

(2)使用sed命令sed -i "s/\r//" filename  或者 sed -i "s/^M//" filename直接替换结尾符为unix格式

(3)vi filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。

注意如果直接执行shell脚本,而放到定时任务中不成功,此时需要查看定时任务执行日志,如下命令可输出定时任务执行日志(./etc/profile; 为引入环境变量):

*/5 * * * * ./etc/profile;/bin/sh /opt/bak.sh -> /opt/execronlog.txt 2>&1 &

查看日志cat /opt/execronlog.txt:

the input device is not a TTY

若使用docker:

#!/bin/bash

source /etc/profile

docker exec -it 3473faa6479a mysqldump -uroot -p1qaz@WSX oa > /data/mysql/backup/oa_$(date +"%Y%m%d%H%M%S").sql

改为 docker exec -i 3473faa6479a mysqldump -uroot -p1qaz@WSX oa > /data/mysql/backup/oa_$(date +"%Y%m%d%H%M%S").sql

参考:https://blog.csdn.net/k8080880/article/details/78178502?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
运行shell脚本提示找不到该文件的错误,解决办法
浅谈关于unix系统下的病毒特点
[转]bad interpreter: No such file or directory (Linux Shell脚本异常) - 笑遍世界的日志 - 网易博客
怎么才能去掉文本中的控制字符呢?
/bin/sh^M:损坏的解释器: 没有那个文件或目录
/bin/bash^M: bad interpreter: 没有那个文件或目录
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服