Warning WIP!
OS support:
- Linux
x86_64- Built and tested. - Linux
aarch64,armv7andarm- Built. - macOS
x86_64- Built and tested. - macOS
aarch64- Built. - Windows - Not supported.
Check Testing.
Installation:
You can either get artifacts from recent workflows, binaries from releases or install using cargo:
or
When installing crescent using cargo, default profiles will be created in crescent's main directory: <home>/.crescent/. You can find these profiles here.
Applications files, profiles and any important file is located in crescent's main directory.
Commands:
With start you can launch an application by passing the file path to your executable, optionally give it a custom name with -n (defaults to the file name), you can pass an interpreter with -i, for example, if you have a python project you can pass -i python3.Interpreter arguments can be added using --interpreter-args "-Xms2G -Xmx2G". Arguments can be added using -a. Profiles can be passed with -p <name/path>, arguments will overwrite profile options.
As an example, a command to start a Minecraft server would look like this:
cres start ./server.jar -i java --interpreter-args "-Xms2G -Xmx2G" -a "--nogui" -n fabric-server.
Profiles can be made to turn the above command to just:
cres start -p fabric-server.
list the running applications.
log prints an application's log file, you can specify the amount of lines with -l (defaults to 200). You can watch the file by adding -f flag, which will print new lines as they are added to the file.
send a command to the provided application.
attach to an application, which let's you watch logs in realtime and send commands.
kill (SIGKILL), stop (SIGTERM) or signal <app> <sig> to send a signal to an application.
status prints information about an application.
Testing
A simple cross configuration file is provided for testing different architectures, it simply installs python3-minimal before building as python is necessary to run long_running_service.
If you see permission errors when running tests, you can try setting the flag
CROSS_ROOTLESS_CONTAINER_ENGINE=1.
Why?
I wanted to learn some Rust so I decided to create a tool similar to PM2 and mark2, these two tools saved me from a lot of headache when spinning up background services for apps and in the case of mark2, Minecraft servers.
Should I use cres-
Not for anything in production, game servers for friends for example shouldn't be a problem. crescent does not currently support auto restarts in case of a crash or something equivalent to pm2 save to start apps on system startup.
Todo
- More tests, 85% codecov would be cool
- Attach/Log command watches the log file with the
notifycrate, it could use the application socket to receive new lines instead - Lots of unwraps inside threads
- Probably redesign the entire thing when I acquire more knowledge