我写了一个小的 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) 我已按照此处的说明设置 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?
我想在 AWS 上启动一个 EC2 实例。我想安装 Ubuntu Xenial 发行版。我怎么知道其中哪一个是 Xenial?
我看到很多选项,例如:
我想要 Xenial 的原因是 Galera 集群已经为 xenial 构建了:
http://releases.galeracluster.com/mysql-wsrep-5.6.39-25.22/ubuntu/dists/xenial/
我添加了以下 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没有执行。知道问题出在哪里,或者我如何诊断出了什么问题?
注意我只添加了几分钟来测试脚本
我想创建一个 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)
它失败了,告诉我:
主机:没有那个文件或目录
我想将所有文件从父文件夹移动到子文件夹......并忽略子文件夹中的现有文件,即如果img1.jpg父文件夹和子文件夹中都存在,则不应在子文件夹中替换它。
我可以移动如下文件:
mv ./parent/*.jpg ./parent/child/
Run Code Online (Sandbox Code Playgroud)
但不知道如何告诉 Ubuntu 忽略现有文件?