...
ulimit -l unlimited
The following line is also needed to run the ioc with real-time priorities:
ulimit -r unlimited
Finally, you will be running your 'virtual' ioc as a specific user called as 'laci' who has permissions to run this ioc.:
Setup the permissions for this user 'laci':
umask 002
Now you are ready to start your IOC and have it run as a foreground process.
Create a directory called as 'vioc-b34-bd32' for your 'virtual' ioc process under the following directory:
$IOC/ioc-b34-bd32
cd $IOC/ioc-b34-bd32/vioc-b34-bd32
Set up a soft link to the 'bin' directory of your IOC app that you created in step (6):
ln -s /afs/slac/g/lcls/epics/R3-14-12-3_1-0/iocTop/Test/Development/bin/linuxRT-x86 bin
Create an ASCII text file called 'screenrc' with the following lines in it:
deflog on
logtstamp on
defscrollback 10000
'screenrc' is passed as an argument to the 'screen' process and allows us to customize a few parameters such as number of lines stored in history buffer that we can scroll back for viewing.
In the same directory $IOC/ioc-b34-my01/vioc-b34-my01, add a startup script 'iocStartup.cmd' for vioc-b34-my01:
This script is very similar to the Soft IOC startup scripts that we are familiar with.
It setups some env variables used It setups some shell environment variables used by all iocs, then changes to the ioc boot directory and starts the st.cmd file.12. How do I start my ioc and monitor it?
The EPICS environment variables that are set in this script can be used by your application's st.cmd script.
The default st.cmd script generated by the module icdTemplates, expects the following environment values to be defined somewhere.
iocStartup.cmd may be a good place to define it:
epicsEnvSet("IOC_NAME","VIOC:B34:BD32")
epicsEnvSet("IOC_APP","Example, from any lcls-dev host ssh to your ioc as 'laci':
ssh laci@ioc-b34-bd32
$ cd /afs/slac/g/lcls/epics/iocCommon/iocR3-b34-bd32
Ensure that 'startupConsole-laci-rt.cmd' is in your current directory.
Start the virtual ioc as a foreground process:
./startupConsole-laci-rt.cmd
13. How do I start my ioc automatically every time my server boots up?
You can start your ioc as a background process that will start up everytime your Linux server reboots, as follows:
14-12-3_1-0/iocTop/Test/Development")
epicsEnvSet("IOC_BOOT","${IOC_APP}/iocBoot/vioc-b34-bd32")
epicsEnvSet("IOC_COMMON","/afs/slac/g/lcls/epics/iocCommon")
epicsEnvSet("SYS_FACILITY","SYS0")
In addition to setting these environment variables, this script also executes some scripts common to all EPICS IOCs, such as below:
${IOC_COMMON}/All/Dev/linuxRT_pre_st.cmd
${IOC_COMMON}/All/Dev/linuxRT_post_st.cmd
The IOC Apllication Startup is sandwiched between the above two scirpts:
cd ${IOC_BOOT}
< st.cmd
12. What are the guidelines for creating App-specific st.cmd?
Work is still in progress regarding standardizing App-specific st.cmd.
The IOC engineer has freedom to be as creative with this script during development;
but the following are expected as a minimum when the ioc is installed in production.
That is the reason they are included in the default template provided by the icdTemplates module as a guideline:
13. How do I start my ioc and monitor it?
Example, from any lcls-dev host ssh to your ioc as 'laci':
ssh laci@ioc-b34-bd32
$ cd /afs/slac/g/lcls/epics/iocCommon/ioc-b34-bd32
Ensure that 'startupConsole-laci-rt.cmd' is in your current directory.
Start the virtual ioc as a foreground process:
./startupConsole-laci-rt.cmd
14. How do I start my ioc automatically every time my server boots up?
You can start your ioc as a background process that will start up everytime your Linux server reboots, as follows:
In $IOC/ioc-b34-bd32, you can add another script 'startup-laci-rt.cmd' that lets you start your EPICS-based 'virtual' ioc as a background process in your host.
Invoke this script from $IOC/ioc-b34-bd32/startup.cmd:
su laci -c /usr/local/lcls/epics/iocCommon/eioc-b34-bd32/startup-laci-rt.cmd
The above line starts another shell so that the user called "laci" can start the IOC Process as opposed to the "root" account
Remember, the kernel modules can only be loaded onto the kernel with "root" permissions but iocs can be run by users.
In $IOC/ioc-b34-bd32, you can add another script 'startup-laci-rt.cmd' that lets you start your EPICS-based 'virtual' ioc as a background process in your host.
Invoke this script from $IOC/ioc-b34-bd32/startup.cmd directly after the kernel modules are loaded, as below:
.
/afs/slac/g/lcls/epics/iocCommon/eioc-b34-bd32/kernel-modules.cmd
su laci -c /usr/local/lcls/epics/iocCommon/eioc-b34-bd32/startup-laci-rt.cmd
The above line starts another shell so that the user called "laci" can start the IOC Process as opposed to the "root" account
Remember, the kernel modules can only be loaded onto the kernel with "root" permissions but iocs can be run by users.
'startup-laci-rt.cmd' executes the EPICS-based IOC startup script and detaches it using the linux screen program
It contains the following lines which are similar to what we have in startupConsole-laci-rt.cmd:
# Lock Kernel in memory
ulimit -l unlimited
# Run with real-time priorities
ulimit -r unlimited
# Set umask for the laci user
umask 002
# EPICS IOC Application Real-time Process
cd $IOC/ioc-b34-bd32/vioc-b34-bd32
screen -h 8192 -dm -S vioc-b34-b32 `pwd` $APP/Test/Development/bin/linuxRT-x86/MyTest iocStartup.cmd
The above line will automatically start your ioc and have it running in the background, every time your server reboots
executes the EPICS-based IOC startup script and detaches it using the linux screen program
It contains the following lines which are similar to what we have in startupConsole-laci-rt.cmd:
export EPICS_IOCS=/afs/slac/g/lcls/epics/iocCommon
# Lock Kernel in memory
ulimit -l unlimited
# Run with real-time priorities
ulimit -r unlimited
# Set umask for the laci user
umask 002
# EPICS IOC Application Real-time Process
cd $EPICS_IOCS/ioc-b34-bd32/vioc-b34-bd32
screen -h 8192 -c screenrc -dm -S vioc-b34-bd32 bin/MyTest iocStartup.cmd
The above line will automatically start your ioc and have it running in the background, every time your server reboots
To view the console output from the running ioc, you can attach the screen process to it, as described below:
(1) ssh into the ioc-b34-b32 as user "laci":
ssh laci@ioc-b34-bd32
(2) To see the list of all EPICS iocs running on this CPU, at the console type:
screen -ls
(3) To attach to vioc-b34-b32 that is running MyTest application:
screen -r vioc-b34-b32
(4) To detach screen process from vioc-b34-bd32, press:
While pressing <CTRL> key, press ''A" and then 'D".
(5) You can also connect to vioc-b34-bd32 from any linux host, not just from ioc-b34-bd32.
This method uses the python-based iocConsole program.
ssh into LCLSDEV host (example, lcls-dev2) an type:
iocConsole vioc-b34-bd32
1514. Which script calls what and what parameters are passed from one to another?
...