====== JSexec ======
JSexec may be used to execute some Synchronet JavaScript files (e.g. ''*.js'', ''*.ssjs'') externally from Synchronet.
===== Uses =====
* Persistent execution of static services (e.g. [[:service:ircd]]) independent of Synchronet
* Background execution of timed events (e.g. [[:module:newslink]])
* Command-line execution of sysop functions (e.g. [[:module:makeguest]])
* [[:howto:apache|CGI]] generated dynamic HTML
===== Independence =====
A Synchronet installation is required for JSexec to function, though JSexec will execute scripts successfully even when Synchronet is not running.
===== Command Line =====
usage: jsexec [-opts] [[path/]module[.js] [args]
or: jsexec [-opts] -r js-expression [args]
or: jsexec -v
available opts:
-r run (compile and execute) JavaScript expression
-c specify path to Synchronet CTRL directory
-C do not change the current working directory (to CTRL dir)
-d run in background (daemonize)
-m set maximum heap size (default=16777216 bytes)
-t set time limit (default=864000, 0=unlimited)
-y set yield interval (default=10000, 0=never)
-g set garbage collection interval (default=100, 0=never)
-h[hostname] use local or specified host name (instead of SCFG value)
-u set file creation permissions mask (in octal)
-L set log level (default=6)
-E set error log level threshold (default=4)
-i set load() comma-sep search path list (default="load")
-f use non-buffered stream for console messages
-a append instead of overwriting message output files
-A send all messages to stdout
-A send all messages to file instead of stdout/stderr
-e send error messages to file in addition to stderr
-o send console messages to file instead of stdout
-S send status messages to file instead of stderr
-S send status messages to stdout
-n send status messages to /dev/null instead of stderr
-q send console messages to /dev/null instead of stdout
-v display version details and exit
-x disable auto-termination on local abort signal
-l loop until intentionally terminated
-p wait for keypress (pause) on exit
-! wait for keypress (pause) on error
-D load the script into an interactive debugger
==== Module ====
The ''module'' argument is optional if the standard input stream (''stdin'') is not a console (''tty''), allowing for [[#shebang]] support on Unix-like operating systems.
**Note:**
When JSexec starts up, it changes its **current working directory** to the Synchronet ''[[dir:ctrl]]'' directory. If you pass filenames on the command-line to a module, the paths must be full/absolute paths or relative to the Synchronet ''[[dir:ctrl]]'' directory.
==== Log Level ====
The log severity/output verbosity level can be controlled via the ''[[dir:ctrl]]/[[config:jsexec.ini]]'' file or specified using the ''-L'' command-line option. The value following ''-L'' can either be the numeric log level (''7'' being the lowest-severity / most verbose output) or a [[http://wiki.synchro.net/config:ini_files#enumerated_values|word]] describing the log level (e.g. ''-Ldebug'' for debug-level logput).
===== Additional Properties =====
Additional properties available to JavaScript scripts running from JSexec:
^Property ^ Type ^Description^
|''jsexec_revision'' |string|[[dev:CVS]] revision of JSexec (example: ''%%"1.135"%%'')|
|''jsexec_revision_detail'' |string |Verbose details about the JSexec build (example: ''%%"JSexec 1.136 Debug Compiled Mar 15 2010 11:13:53 with GCC 3.4.2"%%'')|
|''env'' | Object |Associative array of system environment variables (example: ''%%env["shell"]="/bin/bash"%%'')|
|''stdin'' | File |Standard input stream |
|''stdout'' | File |Standard output stream |
|''stderr'' | File |Standard error output stream |
===== Additional Functions =====
The following global methods (functions) are also available to JavaScript scripts running from JSexec:
^Function ^ Return Value ^ Description ^
|''log'' | String | Log a message |
|''read'' | String | Read from stdin |
|''readln'' | String | Read line from stdin |
|''write'' | String | Write a string to stdout |
|''print'' | String | Write a line to stdout (a.k.a. ''writeln'') |
|''printf'' | String | Write a formatted string to stdout |
|''alert'' | String | Print an alert message on the console |
|''prompt'' | String | Prompt for user input |
|''confirm'' | String | Get a yes/no confirmation |
|''deny'' | String | Get a no/yes confirmation |
|''chdir'' | String | Change the current working directory |
|''putenv'' | String | Add or change an environment variable |
===== conio =====
JSexec includes an instance of a special Console Input/Output class called ''conio''.
FIXME
===== uifc =====
JSexec includes an instance of a special User Interface class called ''uifc''.
See the [[ref:UIFC]] reference page for more details.
===== shebang =====
JSexec for non-Windows platforms will ignore the first line of the interpreted script if it begins with ''#!'', allowing for a [[wp>shebang (Unix)]] style script file where the first line of the script is something like:
#!/sbbs/exec/jsexec -c/sbbs/ctrl
This allows JSexec scripts to be executed easily via [[:howto:apache|CGI]] as well as other command-line conveniences on Unix-like operating systems.
===== Output =====
JSexec supports multiple output methods and streams:
- **Error** (default stream: ''stderr'')\\ JS ''log()'' messages with log-levels of ''LOG_ERR'' or lower
- **Status** (default stream: ''stderr'')\\ JS ''log()'' messages with log-levels higher than ''LOG_ERR''\\ JSexec startup/compile/shutdown progress messages
- **Console** (default stream: ''stdout'')\\ JS ''write()'' ''writeln()'' ''printf()'' ''alert()'' and ''prompt()'' messages
==== syslog ====
When JSexec is executed on *nix operating systems with the ''-d'' (Daemonize) option, all JS ''log()'' messages are directed to ''syslog''.
==== Suppression ====
* **Status** output is suppressed by default when JSexec is run without a controlling TTY. This behavior can be overridden with the ''-A'' and ''-S'' command-line options.
* **Status** output can be manually suppressed with the ''-n'' (Null) command-line option.
* **Console** output can be suppressed with the ''-q'' (Quiet) command-line option.
==== Redirection ====
* The output streams may be redirected to specific filenames via command-line options.
* **Error** output can be forked to both ''stderr'' and a specified filename via the ''-e'' command-line option.
===== See Also =====
* [[custom:javascript|JavaScript]]
* [[:config:jsexec.ini]]
* [[:howto:apache|How To Use Apache HTTP Server with Synchronet]]
* [[:util:|Utilities]]
{{tag>javascript jsexec customization}}