EPrints 常用 CLI 命令详解
EPrints 3.4.7 命令行管理实测详解:bin/epadmin 全部 33 个子命令分组讲解(--help 原文)、create_user/import/export/reindex/test/reload 等实测回显逐条照抄、epindexer 占位符修复与状态日志、generate_* 生成工具族、EPrints API 脚本 move_to_archive 发布记录,含 schema 插件缺失等真实失败实录与 CLI 常见问题速查表。
EPrints 常用 CLI 命令详解
目标:以实测环境(Ubuntu 22.04.5 + EPrints 3.4.7,archive
demo/demo2)为样本,系统讲解 EPrints 命令行管理套件——bin/epadmin全部 33 个子命令(--help原文逐条)、bin/import/bin/export导入导出、bin/epindexer索引守护、generate_static/generate_apacheconf/import_subjects生成类工具,以及绕过 CLI 直接用 EPrints API 脚本操作记录的姿势。全部回显实测照抄,含两处真实失败实录。部署背景见 《EPrints 3.4.7 Ubuntu 22.04 安装部署指南》,配置体系见 《EPrints 配置参数详解(cfg.d 分层体系与关键项)》。
一、环境信息与工具清单
EPrints 的全部管理入口在 /opt/eprints3/bin/,实测目录清单(22 项):
check_xapian epadmin epindexer epindexer.in export generate_abstracts
generate_apacheconf generate_sitemap generate_static generate_views import
import_subjects indexer issues_audit junit_tests lift_embargos
remove_citation_caches run_staged_tasks send_alerts startup.pl toolbox unit_tests
运行身份铁律:所有命令必须以 eprints 用户执行,root 直跑实测报错(实录见安装篇排障 2):
We appear to be running as user: root (0)
We expect to be running as user: eprints (106)
标准姿势:
su eprints -s /bin/bash -c 'cd /opt/eprints3 && ./bin/epadmin <command> <archive_id> ...'
版本自证(实测):
# ./bin/epadmin --version
epadmin 3.4.7 [Schema 3.3.4]
Copyright 2024 University of Southampton.
EPrints 3.4 is supplied by EPrints Services.
💡 技术拓展:
epadmin 3.4.7 [Schema 3.3.4]中括号里的 Schema 号是数据库结构版本——升级程序与表结构解耦,epadmin upgrade就是按 Schema 差量补表的动作(见第七节)。
二、epadmin 全景:33 个子命令
./bin/epadmin --help 实测输出的命令全集(33 个,按用途分组):
| 组 | 命令 |
|---|---|
| 建库建对象 | create create_db create_tables create_user |
| 配置与体检 | config_core config_db test reload set_developer_mode profile help |
| 索引与缓存 | reindex erase_fulltext_index rebuild_triples recommit reorder redo_hash rehash redo_mime_type redo_thumbnails refresh_views refresh_abstracts refresh_citations cleanup_cachemaps |
| 结构同步与升级 | update update_dry_run upgrade schema |
| 用户会话 | logout_all_users |
| 高危清理 | erase_data erase_eprints remove_field |
| 测试 | test(体检)/ 另有 bin/unit_tests、bin/junit_tests |
通用选项(--help 实测原文):--help 简帮助、--man 完整手册、--verbose 详细执行(可叠加)、--force 免确认、--version 版本、--quiet(原文注明 "This option does not do anything",占位)。
三、建库与对象管理
create:./bin/epadmin create pub 启动建库向导(flavour 参数必填,实测不传或传非法值回显 Available repository types are: ... 并要求 Usage: epadmin create [repository type])。24 问逐答全流程实录见安装篇第六节,此处不重复。
create_db / create_tables:向导拆步版——create_db <id> 按当前 database.pl 建库建用户,create_tables <id> 建表。实测建表回显形态:
Creating database tables ...
Set DB compatibility flag to '3.3.4'.
Done creating database tables.
create_user:建首个管理员/编辑的命令行入口。参数序(源码 bin/epadmin sub create_user 实测):create_user <repo> <username> <usertype> <password> <email>,usertype 合法值 user/editor/admin(定义于 lib/namedsets/user)。实测新建一名编辑:
# ./bin/epadmin create_user demo tester editor q1w2e3r4 tester@eprints.qzuo.local
Creating a new user in demo
Successfully created new user:
ID: 2
四、配置体检与热重载
test:配置与数据库连通性体检,实测回显:
# ./bin/epadmin test demo
Everything seems OK.
不传 archive id 则逐个加载全部库检查;加 --verbose 输出更多。
config_core / config_db:重跑建库向导的核心配置/数据库配置问答段(10_core.pl/database.pl 可再生成,文件头注释原文:"You can regenerate this file by doing ./bin/epadmin config_core demo")。
reload:通知 Web 进程重载配置,实测回显:
# ./bin/epadmin reload demo
The repository config will be reloaded, but you should still restart apache as
soon as possible.
set_developer_mode:epadmin set_developer_mode <id> on|off——on 时每个页面请求都重载配置,开发提效利器;--help 原文警告生产禁用(服务器负载剧增)。
五、索引与缓存维护
reindex:重建某 dataset 的检索索引。不带 dataset 参数实测直接落回 usage 帮助页;正确用法 reindex <repo> <dataset> [id...],实测交互:
# ./bin/epadmin reindex demo eprint
You are about to reindex "eprint" in the demo repository.
This can take some time.
Number of records in set: 1
Continue [y/n] ?
管道场景加 --force 免确认。dataset 可取 eprint/document 等;对 eprint/document 加 --force 时 --help 原文注明会先重生成 .indexcodes 缓存再索引。
erase_fulltext_index:清空 .words/.indexcodes 缓存,强制全文抽取工具链(pdftotext/lynx 等)重跑——--help 原文场景:全文索引配置晚于建库启用、或抽取曾出错。
rebuild_triples:重排队 RDF 三元组缓存(可指定 dataset 与 dataobj id 列表/区间 10-20);recommit:重算自动值(automatic fields);reorder:重生成 order 排序值;redo_hash / rehash / redo_mime_type:重算文件哈希/校验和日志、重识别 MIME 类型;redo_thumbnails:重生成缩略图与图像预览。
refresh_views / refresh_abstracts / refresh_citations:通知 Web 进程重刷视图页/摘要列表页/引用缓存,--help 原文注明三者均附带 config reload。
cleanup_cachemaps:清理孤儿缓存表。
schema:为 EP3 XML 生成 schema——实测本环境失败(3.4.7 源码树缺插件,实录照抄):
# ./bin/epadmin schema demo
Plugin 'Export::XML_Schema' not found.
Can't call method "initialise_fh" on an undefined value at ./bin/epadmin line 2373.
结论:该子命令依赖 Export::XML_Schema 插件,源码 tarball 未随附,需要时另行获取或改用官方 wiki 的 XSD。
六、用户会话管理
logout_all_users:epadmin logout_all_users <repo> [exclude_user_id ...] 强制全库下线(可豁免指定 uid),改权限/修漏洞后的止血动作。
七、结构同步与升级
| 命令 | 用途(--help 原文要点) |
|---|---|
update <id> | 按当前配置增表增列对齐数据库,不删数据;原文提示 live 库先备份 |
update_dry_run <id> | 只报告 update 将新增什么,不改库 |
upgrade <id> | 升级 EPrints 程序后对齐数据库表,并提示其他必要动作 |
典型链路:改 eprint_fields.pl 加字段 → epadmin update demo →(新字段有数据后)epadmin reindex demo eprint。
八、高危命令(实测环境刻意未执行)
- erase_data
<id>:--help原文——删库重建+清除所有文档与文件,不动配置文件; - erase_eprints
<id>:清空 eprint/document 表与文件,保留配置、用户与主题表; - remove_field
<id> <dataset> <field_id>:删除字段的数据库条目,原文警告 "can not be undone!"。
三者不可逆,本篇所在实测环境承载验证数据,故仅收录语义不演示执行。误删字段的恢复路径:改回配置 → update 无法找回已删列数据,只能重导入。
九、bin/import 与 bin/export:导入导出
usage 实测原文:
# ./bin/import
Usage:
import repository_id [options] dataset
import repository_id [options] dataset plugin filename
# ./bin/export
Usage:
export repository_id [options] dataset
export repository_id [options] dataset plugin [objectid] [objectid...]
要点:参数顺序 repo → dataset → plugin → filename/objectid;插件名大小写敏感(小写 bibtex 实测报 Plugin not found,正确为 BibTeX;EP3 XML 为 EPrintsXML,另有 Core/Csv/EndNote/DublinCore 等,界面导出下拉实测可见 Text/BibTeX/DC/EndNote/HTML/METS/Ids/OpenURL/Refer/RIS 十种)。
导入实测(--force 免逐条确认,--user 1 以 admin 身份):
# ./bin/import demo --force --verbose --user 1 eprint BibTeX /work/sample.bib
Starting EPrints Repository.
Connecting to DB ... done.
Warning! Importing an EPrint record into 'eprint' dataset without eprint_status being set. Using 'buffer' as default.
Number of records imported: 1
1
Ending EPrints Repository.
注意 warning 行:BibTeX 无状态字段,导入默认落 buffer(待审),发布需走 move_to_archive(第十二节)或后台审核。
导出实测:
# ./bin/export demo --verbose eprint BibTeX 1
year = {2026},
pages = {45--67},
volume = {12},
number = {3},
title = {Building Institutional Repositories with EPrints: A Practical Evaluation},
author = {Zhang, San and Li, Si},
keywords = {institutional repository, metadata, open access},
url = {http://127.0.0.1:8141/id/eprint/1/}
}
Ending EPrints Repository.
不带 objectid 则导出全库;--verbose 打印连接与进度行。
十、bin/epindexer:索引守护
源码 tarball 的 bin/epindexer 是未替换占位符的模板(与 bin/epindexer.in 并存),直接运行报 No such file or directory 类路径错,实测修复:
sed -i "s|EPRINTS_PATH|/opt/eprints3|g" bin/epindexer
./bin/epindexer start
./bin/epindexer status
status 实测回显:
Indexer is running with PID 547. Next index in 30 seconds.
工作日志 /opt/eprints3/var/indexer.log 实测尾部:
[Sun Nov 1 12:57:55 2026] 547 ** Indexer process started
[Sun Nov 1 12:57:55 2026] 547 *** Starting indexer sub-process
/opt/eprints3/archives/demo/var/last_changed.timestamp has been modified since the repository config was loaded: reloading!
索引器轮询 archives/<id>/var/last_changed.timestamp,记录变更后 30 秒级增量入库;Xapian 索引文件在 archives/<id>/var/xapian/。
十一、生成类工具
| 工具 | usage/实测回显 |
|---|---|
generate_static <id> | 重建 archives/<id>/html 静态资源(js/css/首页/政策页),建库向导末段即调用,实测输出数百行 mkdir/-> 复制回显 |
generate_apacheconf | 无参实测:Wrote /opt/eprints3/cfg/perl_module_isolation.conf、Wrote /opt/eprints3/cfg/perl_module_isolation_vhost.conf、No files were changed. For more information do ./generate_apacheconf --man;--replace 重生成各库 VirtualHost |
import_subjects | usage:import_subjects repository_id [options] [subjectfile];建库时实测导入 LOC 主题回显 Done importing 280 subjects from .../cfg/subjects |
generate_views <id> | 预生成导航视图页(配合 epadmin refresh_views) |
generate_abstracts / generate_sitemap | 摘要页/Sitemap 批量生成 |
lift_embargos / send_alerts / run_staged_tasks / issues_audit / remove_citation_caches | 定时任务族:解除 embargo、订阅邮件、阶段任务、检查项审计、清引用缓存——生产配 cron 周期调用(以 eprints 身份) |
十二、API 脚本:CLI 覆盖不到的操作
EPrints 的 Perl API 可直接脚本化操作记录。实测范例——把 buffer 记录发布到 archive(set_archive.pl):
#!/usr/bin/perl -w
use strict;
use lib "/opt/eprints3/perl_lib";
use EPrints;
my $repository = EPrints->new->repository("demo");
my $dataobj = EPrints::DataObj::EPrint->new($repository, 1);
$dataobj->move_to_archive;
$repository->logout_current_user;
exit;
发布后状态实测(get_value("eprint_status")):
eprint 1 eprint_status = archive
两个实测教训:① API 没有 set_status/reindex 方法,状态迁移用 move_to_archive(buffer/deletion→archive)等专用动词;② EPrints::DataObj::EPrint 实例上直接调 get_status 实测报 Can't locate object method "get_status"——读字段值用 get_value("eprint_status")。脚本须以 eprints 用户执行(同一身份铁律)。
十三、日志与 var 目录
实测两级 var:
# ls /opt/eprints3/var/
indexer.log indexer.pid indexer.tick
# ls /opt/eprints3/archives/demo/var/
last_changed.timestamp xapian
站点级:索引器日志/PID/tick;档案级:变更时间戳与 Xapian 索引。Apache 侧错误仍看系统日志(/var/log/apache2/error.log),mod_perl 阶段报错(如配置 Perl 语法错)都落在那里。
十四、CLI 常见问题速查
| 症状 | 根因与解法(均实测) |
|---|---|
We expect to be running as user: eprints (106) | root 直跑被拒;su eprints -s /bin/bash -c '...' |
'eprints' is not a valid user on this system | 系统用户未建;先建 eprints 用户/组 |
| 建库连库报 1698 | MariaDB root 默认 unix_socket 认证;ALTER USER 'root'@'localhost' IDENTIFIED BY '...' |
Plugin not found(import/export) | 插件名大小写敏感:BibTeX 非 bibtex |
| import 管道挂起 | 缺 --force,逐条等确认 |
Unable to get Terminal Size ... | Term::ReadKey 在无 TTY 管道的无害警告,grep -v "Terminal Size" 过滤 |
./bin/epindexer: No such file or directory | 占位符未替换;`sed -i "s |
epadmin schema 崩 | 源码树缺 Export::XML_Schema 插件(第五节实录) |
十五、参考链接
- EPrints GitHub 仓库(
bin/epadmin源码与 pod 帮助):https://github.com/eprints/eprints (查询日期 2026-11-01) - EPrints wiki 管理工具文档:https://wiki.eprints.org/w/EPrints_Admin (查询日期 2026-11-01)
- EPrints API 参考(EPrints::DataObj::EPrint):https://wiki.eprints.org/w/Category:API (查询日期 2026-11-01)
- OAI-PMH 2.0 规范(导入导出互操作背景):https://www.openarchives.org/OAI/openarchivesprotocol.html (查询日期 2026-11-01)
- 站内姊妹篇:《EPrints 介绍与选型指南》、《EPrints 3.4.7 Ubuntu 22.04 安装部署指南》、《EPrints 配置参数详解(cfg.d 分层体系与关键项)》