HYBRIS:如何创建Cronjob将新创建产品分配至「New Arrivals」分类?
实现自动将新产品分配至「New Arrivals」分类的Cronjob方案
1. 编写产品分类分配脚本
根据系统数据结构编写处理脚本,以下是两种通用场景的实现示例:
场景1:直接操作MySQL数据库(Shell脚本)
假设系统用MySQL存储产品与分类关联,表结构如下:
products:存储产品信息,含id(产品ID)、created_at(创建时间)字段product_categories:存储产品-分类关联,含product_id、category_id字段categories:存储分类信息,「New Arrivals」对应的category_id为123(替换为实际ID)
创建脚本文件assign_new_arrivals.sh:
#!/bin/bash # 数据库配置 DB_USER="your_db_user" DB_PASS="your_db_password" DB_NAME="your_db_name" NEW_ARRIVALS_CAT_ID=123 TIME_WINDOW="1 hour" # 每次处理最近1小时内的新产品,可按需调整 # 执行SQL:将未分配至目标分类的新产品添加关联 mysql -u$DB_USER -p$DB_PASS $DB_NAME << EOF INSERT INTO product_categories (product_id, category_id) SELECT p.id, $NEW_ARRIVALS_CAT_ID FROM products p LEFT JOIN product_categories pc ON p.id = pc.product_id AND pc.category_id = $NEW_ARRIVALS_CAT_ID WHERE p.created_at >= NOW() - INTERVAL $TIME_WINDOW AND pc.product_id IS NULL; EOF # 记录执行日志 echo "$(date): Assigned new products to New Arrivals category" >> /var/log/new_arrivals_assignment.log
给脚本添加执行权限:
chmod +x assign_new_arrivals.sh
场景2:复杂逻辑处理(Python脚本)
如果需要排除特定类型产品、调用系统API等复杂逻辑,用Python脚本更灵活:
import mysql.connector from datetime import datetime, timedelta # 数据库配置 db_config = { 'user': 'your_db_user', 'password': 'your_db_password', 'host': 'localhost', 'database': 'your_db_name' } NEW_ARRIVALS_CAT_ID = 123 TIME_WINDOW_HOURS = 1 # 处理最近1小时的新产品 def assign_new_arrivals(): conn = mysql.connector.connect(**db_config) cursor = conn.cursor() # 计算时间阈值 threshold = datetime.now() - timedelta(hours=TIME_WINDOW_HOURS) threshold_str = threshold.strftime('%Y-%m-%d %H:%M:%S') # 查询未分配的新产品(可选:只处理激活状态的产品) query = """ SELECT p.id FROM products p LEFT JOIN product_categories pc ON p.id = pc.product_id AND pc.category_id = %s WHERE p.created_at >= %s AND pc.product_id IS NULL AND p.status = 'active' """ cursor.execute(query, (NEW_ARRIVALS_CAT_ID, threshold_str)) product_ids = [row[0] for row in cursor.fetchall()] # 批量插入关联记录 if product_ids: insert_query = "INSERT INTO product_categories (product_id, category_id) VALUES (%s, %s)" cursor.executemany(insert_query, [(pid, NEW_ARRIVALS_CAT_ID) for pid in product_ids]) conn.commit() print(f"{datetime.now()}: Assigned {len(product_ids)} products to New Arrivals") else: print(f"{datetime.now()}: No new products to assign") cursor.close() conn.close() if __name__ == "__main__": assign_new_arrivals()
安装依赖:
pip install mysql-connector-python
2. 配置Cronjob定期执行
用crontab设置定时任务,编辑任务列表:
crontab -e
添加以下内容(示例为每小时执行一次,可根据需求调整频率):
# 执行Shell脚本,每小时整点运行 0 * * * * /full/path/to/assign_new_arrivals.sh # 或者执行Python脚本,同时输出日志 # 0 * * * * /usr/bin/python3 /full/path/to/assign_new_arrivals.py >> /var/log/new_arrivals_assignment.log 2>&1
Cron频率参考
*/30 * * * *:每30分钟执行一次0 0 * * *:每天凌晨执行一次0 9 * * 1:每周一上午9点执行一次
关键注意事项
- 避免硬编码数据库密码:可将凭证存放在环境变量或加密配置文件中,Shell脚本可通过
source .env读取 - 先手动测试脚本:确保
./assign_new_arrivals.sh或python3 assign_new_arrivals.py能正常执行并分配分类 - 检查Cron运行日志:CentOS/RHEL查看
/var/log/cron,Ubuntu查看/var/log/syslog,确认任务无报错 - 如果是电商平台(如Magento、Shopify),优先使用平台官方CLI工具或API操作,避免直接修改数据库
内容的提问来源于stack exchange,提问作者Mridul Shukla
相关产品推荐
相关产品推荐

