我尝试使用运行python3脚本的crontab运行shell脚本.crontab用于用户组.现在它运行脚本但不运行其中的python3脚本.我尝试调试它,但我无法弄清楚会发生什么.它可能是一个权限问题或路径问题,但我无法弄清楚.这是行crontab
*/5 * * * * /home/group_name/path/to/script/run.sh
Run Code Online (Sandbox Code Playgroud)
正如我所说的cron作业被执行或者至少那就是我的想法,因为当我跑步时sudo grep CRON /var/log/syslog我会得到像这样的行
Feb 16 20:35:01 ip-**-**-*-*** CRON[4947]: (group_name) CMD (/home/group_name/path/to/script/run.sh)
Run Code Online (Sandbox Code Playgroud)
在下面我也得到一条可能与问题有关的线
Feb 16 20:35:01 ip-**-**-*-*** CRON[4946]: (CRON) info (No MTA installed, discarding output)
Run Code Online (Sandbox Code Playgroud)
最后run.sh看起来像这样
#!/bin/bash
# get path to script and path to script directory
SCRIPT=$(readlink -f "$0")
SCRIPTPATH=$(dirname "$SCRIPT")
echo "set directory"
cd "$SCRIPTPATH"
echo "run first script"
/usr/bin/python3 ./first_script.py > ./log1.txt
Run Code Online (Sandbox Code Playgroud)
但是当cron作业执行时没有任何反应,当我手动运行它时,数据库的cahnges按预期发生.该集团拥有与我相同的权利.shell文件可以由我执行,组和python文件不能由我执行,所以我不知道为什么该组需要这个.
PS:我想在shell中执行python脚本,因为我们有很多脚本,有时会有很多参数,因此crontab会变得人满为患,而且某些脚本必须以特定的顺序执行.
编辑:在我手动运行它exec >> /tmp/output 2>&1之后#! /bin.bash写入回声后立即添加/tmp/output,但不是在我在cron中运行时,而不是在运行任何python脚本之前运行它.
直接从cron运行其中一个python脚本,但即使我复制粘贴与在cron中工作的行完全相同的行,也没有任何反应.
如果任何任务失败,是否有可能使Airflow DAG失败?
我通常在DAG的末尾有一些清理任务,而现在,无论何时最后一个任务成功,整个DAG都被标记为成功。
我正在尝试用Angular2制作一个简单的Markdown内联编辑器.我尝试了几种方法,但似乎都没有效果.我安装了npm标记,现在可以在项目node_modules目录中看到它.我可以导入它,它被netbeans识别.现在,当我使用它没有任何作用,如果我打开firefox debuger然后我发现localhost:3000 /标记未找到.
我把降价转换器放在一个服务中.看起来如下:
import { Injectable } from 'angular2/core';
import * as marked from 'marked';
interface IMarkdownConfig {
sanitize?: boolean,
gfm?: boolean,
breaks?: boolean,
smartypants?: boolean
}
@Injectable()
export class MarkdownService {
//private md: MarkedStatic;
constructor() {
//this.md = marked.setOptions({});
}
setConfig(config: IMarkdownConfig) {
// this.md = marked.setOptions(config);
}
convert(markdown: string): string {
if(!markdown) {
return '';
}
return markdown;
//return this.md.parse(markdown);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用一切正常,除了降价没有翻译.如果我用md取消注释所有行,它就会停止工作.我正在使用它的组件看起来像这样:
import {Component, Input, OnInit } from 'angular2/core';
import {RouteParams} from 'angular2/router';
import {MarkdownService} from …Run Code Online (Sandbox Code Playgroud) 我在EC2上的docker容器中运行气流.当我尝试访问气流UI中的任务日志时,它将我重定向到localhost,然后我必须用EC2 ip替换localhost以查看日志.这样可行,但如果我不必每次都更改地址会更好.
我的问题是,我可以改变这种行为,如果是,在哪里?
我在这个网站上搜索了一段时间,但我能找到的只是人们对日志本身有问题,但没有这个重定向问题.我以为我会找到一些东西,airflow.cfg但我无法弄清楚这是不是正确的地方.
这是我的airflow.cfg,我可以根据需要发布任何其他文件:
[core]
# The home folder for airflow, default is ~/airflow
airflow_home = /usr/local/airflow
# The folder where your airflow pipelines live, most likely a
# subfolder in a code repository
# This path must be absolute
dags_folder = /usr/local/airflow/dags
# The folder where airflow should store its log files
# This path must be absolute
base_log_folder = /usr/local/airflow/logs
# Airflow can store logs remotely in AWS S3 or Google Cloud Storage. …Run Code Online (Sandbox Code Playgroud) 我尝试了不同的方法配置Airflow 1.9将日志写入s3,但它只是忽略它.我发现很多人在这样做之后阅读日志时遇到了问题,但我的问题是日志仍然是本地的.我可以毫无问题地阅读它们,但它们不在指定的s3存储桶中.
我尝试的是首先写入airflow.cfg文件
# Airflow can store logs remotely in AWS S3 or Google Cloud Storage. Users
# must supply an Airflow connection id that provides access to the storage
# location.
remote_base_log_folder = s3://bucketname/logs
remote_log_conn_id = aws
encrypt_s3_logs = False
Run Code Online (Sandbox Code Playgroud)
然后我尝试设置环境变量
AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://bucketname/logs
AIRFLOW__CORE__REMOTE_LOG_CONN_ID=aws
AIRFLOW__CORE__ENCRYPT_S3_LOGS=False
Run Code Online (Sandbox Code Playgroud)
但是它会被忽略,日志文件仍然是本地的.
我从一个容器运行气流,我调整了https://github.com/puckel/docker-airflow到我的情况,但它不会将日志写入s3.我使用aws连接写入dags中的存储桶,这可以工作,但无论是在EC2上还是在我的机器上本地运行,Logs都保持在本地状态.