小编Hoo*_*ini的帖子

无法为我的 scrapy 程序创建 crontab 作业

我写了一个小的 Python 抓取工具(使用 Scrapy 框架)。刮板需要无头浏览...我正在使用 ChromeDriver。

当我在没有任何 GUI 的 Ubuntu 服务器上运行此代码时,我必须安装 Xvfb 才能在我的 Ubuntu 服务器上运行 ChromeDriver(我遵循了本指南

这是我的代码:

class MySpider(scrapy.Spider):
    name = 'my_spider'

    def __init__(self):
        # self.driver = webdriver.Chrome(ChromeDriverManager().install())
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--no-sandbox')
        chrome_options.add_argument('--disable-dev-shm-usage')
        self.driver = webdriver.Chrome('/usr/bin/chromedriver', chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)

我可以从 Ubuntu shell 运行上面的代码并且它执行时没有任何错误:

ubuntu@ip-1-2-3-4:~/scrapers/my_scraper$ scrapy crawl my_spider
Run Code Online (Sandbox Code Playgroud)

现在我想设置一个 cron 作业来每天运行上述命令:

# m h  dom mon dow   command
PATH=/usr/local/bin:/home/ubuntu/.local/bin/
05 12 * * * cd /home/ubuntu/scrapers/my_scraper && scrapy crawl my_spider >> /tmp/scraper.log 2>&1
Run Code Online (Sandbox Code Playgroud)

但是 crontab 作业给了我以下错误:

Traceback (most recent call …
Run Code Online (Sandbox Code Playgroud)

python command-line cron google-chrome selenium

8
推荐指数
1
解决办法
936
查看次数

如何为 MySQL 禁用 AppArmor

我已按照此处的说明设置 Galera 集群。该说明说我需要禁用 appArmor:

禁用 AppArmor


默认情况下,某些服务器(例如 Ubuntu)包含 AppArmor,这可能会阻止 mysqld 打开其他端口或运行脚本。您必须禁用 AppArmor 或将其配置为允许 mysqld...

所以我按照说明执行了以下命令:

sudo ln -s /etc/apparmor.d/usr /etc/apparmor.d/disable/.sbin.mysqld
sudo service apparmor restart
Run Code Online (Sandbox Code Playgroud)

我已经完成了集群配置。但我不确定我是否正确禁用了 AppArmor,因为当我运行时:

sudo aa-status
Run Code Online (Sandbox Code Playgroud)

我得到:

... some more output here
2 processes have profiles defined.
1 processes are in enforce mode.
   /usr/sbin/mysqld (1938)
1 processes are in complain mode.
snap.amazon-ssm-agent.amazon-ssm-agent (1295)
0 processes are unconfined but have a profile defined.
Run Code Online (Sandbox Code Playgroud)

我看到 mysqld 处于强制模式...这是什么意思?这是否意味着针对 MySQL 禁用了 AppArmor?是否可以同时禁用 AppArmor?

mysql apparmor

7
推荐指数
2
解决办法
2万
查看次数

如何确定Ubuntu的分布

我想在 AWS 上启动一个 EC2 实例。我想安装 Ubuntu Xenial 发行版。我怎么知道其中哪一个是 Xenial?

我看到很多选项,例如:

  • Ubuntu Server 18.04 LTS (HVM),SSD 卷类型 - ami-0b76c3b150c6b1423
  • Ubuntu Server 14.04 LTS (HVM),SSD 卷类型 - ami-001dae151248753a2
  • 深度学习 AMI (Ubuntu) 版本 23.0 - ami-0726ab58f406b644f
  • 深度学习基础 AMI (Ubuntu) 版本 18.0 - ami-00c2ec90e50ed2f33
  • Ubuntu Server 16.04 LTS (HVM) 和 SQL Server 2017 Standard - ami-f13ff693
  • Ubuntu Server 14.04 LTS (HVM),SSD 卷类型 - ami-0d21bd76bdbb39f53

更新

我想要 Xenial 的原因是 Galera 集群已经为 xenial 构建了:

http://releases.galeracluster.com/mysql-wsrep-5.6.39-25.22/ubuntu/dists/xenial/

server

6
推荐指数
2
解决办法
1316
查看次数

将 shell 脚本添加为 crontab 作业后不执行

我添加了以下 crontab 作业:

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

58 * * * * ubuntu /home/ubuntu/backup/mysqlbackup.sh
>/home/ubuntu/backup/log/backup.log
Run Code Online (Sandbox Code Playgroud)

我已经尝试过 root 和 ubuntu 用户。

当我运行命令时:

sudo crontab -l
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我运行时:

systemctl status cron
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是mysqlbackup.sh没有执行。知道问题出在哪里,或者我如何诊断出了什么问题?


注意我只添加了几分钟来测试脚本

command-line bash cron

4
推荐指数
1
解决办法
207
查看次数

Shell 脚本无法创建 mysql 备份

我想创建一个 shell 脚本来自动备份 MySQL DB。稍后我会将其复制到 s3 存储桶。

我创建了以下 shell 脚本:

#vim /home/ubuntu/backup/mysqlbackup.sh

#!/bin/bash
## Specify the name of the database that you want to backupbackup

# Database credentials
USER="user1"
PASSWORD="password"
HOST="hostname.compute.amazonaws.com"
DB_NAME="db1"

#Backup_Directory_Locations
BACKUPROOT="/home/ubuntu/backup"
TSTAMP=$(date +"%d-%b-%Y-%H-%M-%S")
S3BUCKET="s3://s3bucket"
#LOG_FILE="/home/ubuntu/backup/log/dump.log"

mysqldump  -h <HOST>  -u <USER>  --database <DB_NAME>  -p"$PASSWORD" > $BACKUPROOT/$DB_NAME-$TSTAMP.sql
Run Code Online (Sandbox Code Playgroud)

然后从命令行,我运行脚本:

sudo bash -x ./mysqlbackup.sh
Run Code Online (Sandbox Code Playgroud)

它失败了,告诉我:

主机:没有那个文件或目录

在此处输入图片说明

mysql command-line bash

2
推荐指数
1
解决办法
1092
查看次数

将文件移动到不同的文件夹,忽略现有文件

我想将所有文件从父文件夹移动到子文件夹......并忽略子文件夹中的现有文件,即如果img1.jpg父文件夹和子文件夹中都存在,则不应在子文件夹中替换它。

我可以移动如下文件:

mv ./parent/*.jpg ./parent/child/
Run Code Online (Sandbox Code Playgroud)

但不知道如何告诉 Ubuntu 忽略现有文件?

command-line bash files mv

1
推荐指数
1
解决办法
1446
查看次数

标签 统计

command-line ×4

bash ×3

cron ×2

mysql ×2

apparmor ×1

files ×1

google-chrome ×1

mv ×1

python ×1

selenium ×1

server ×1